python面向对象

  • 面向过程:根据业务逻辑从上而下写代码
  • 面向过程:对数据与函数绑定到一起,进行封装,这样可以快递进行开发
1.定义类
class 类名
	2.定义方法
class Dog :
	
    #可以直接添加属性,会在调用类的时候直接调用该方法
    def __init__(self):
        self.weight = 5
        self.color = "黄色"
    #另
    def __init__(self, newWeight, newColor):
        self.weight = newWeight
        self.color = newColor
	def bark(self):
    	print("汪汪汪")
    #方法可以对属性进行修改
    def eat(self):
        print("吃东西")
        self.weight += 5
 #创建一只小狗
xiaogou = Dog()
#调用小狗这个对象的一个方法
xiaogou.bark()
xiaogou.run()

#添加属性
xiaogou.weight = 5
xiaogou.color = "黄颜色"

xiaogou.eat()
print(xiaogou.weight)

#验证能否直接修改属性,让小狗的体重增加
xiaogou.weight += 5

wangcai = Dog()
print(wanngcai.weight)
print(wanngcai.weight)

wangcai = Dog(10,"黑色")


理解self:

  • 表示自己
  • 类中定义的叫方法,不在类中定义的叫函数,方法多的时候,按照self传给你的方法进行调用。
  • self是python自动传进去
  • self可以理解为就是你创建的对象,类似C++中的this
  • 只要是类中的方法,都需要写上self

__str__方法:

  • 替换了原来的默认的打印的是内存(魔法方法,一般有下换线的这种__***__)
  • 一般用于print方法的时候
def __str__(self):
    return "哈哈哈,我是小狗!"

尽量通过方法修改属性,最好不要直接修改属性

存放家具例子:

item,self分别指的是谁,要能够分清楚

#定义一个home家,类
class Home:

    def __init__(self, area):
        self.area = area
        self.rongNaList = []

    def __str__(self):
        mag = "家当前可用的面积为:" + str(self.area)
        return mag

    def containItem(self, item):
        #API接口,提供一个函数给你用,应用编程接口
        bedArea = item.getBedArea()
        #此方法也可以用,但是有危险
        #bedArea = item.area

        if self.area > bedArea:
            self.rongNaList.append(item)
            self.area -= bedArea
            print("当前添加"+ item.getBedName() + "成功。。。当前可用面积" + str(self.area))
        else:
            print("error:当前物品需要的面积大于家可用的面积:" + item.getBedName())

#定义一个 bed床 类
class Bed:

    def __init__(self, name, area):
        self.area = area
        self.name = name

    def __str__(self):
        msg = self.name + "床占用的面积为:" + str(self.area)
        return msg

    def getBedArea(self):
        return self.area

    def getBedName(self):
        return self.name

home = Home(100)
print(home)

bed = Bed('席梦思', 4)
print(bed)

home.containItem(bed)
#bed.getBedArea()
print(home)

bed2 = Bed("木板床", 10)
home.containItem(bed2)
print(home)

bed3 = Bed("超级大的床",170)
home.containItem(bed3)
print(home)

运行结果:

D:\1a\python3.6.1\python.exe E:/python_workspace/python_notes/example9-storeFurniture.py
家当前可用的面积为100
席梦思床占用的面积为4
当前添加席梦思成功。。。当前可用面积96
家当前可用的面积为96
当前添加木板床成功。。。当前可用面积86
家当前可用的面积为86
error:当前物品需要的面积大于家可用的面积:超级大的床
家当前可用的面积为86

放置家具升级:

#定义一个home家,类
class Home:

    def __init__(self, area):
        self.area = area
        self.rongNaList = []
        #灯的状态为off
        self.light = 'off'

    def __str__(self):
        msg = "家当前可用的面积为:" + str(self.area) + ": 灯的状态为: " + self.light
        if len(self.rongNaList) > 0:

            msg += "; 当前有 : "
            #因为在append的时候,添加的是对象的引用,那么此时的temp就是对象的应用,可以理解为就是一个对象

            for temp in self.rongNaList:
                msg += temp.getBedName() + ", "
            msg = msg.strip(", ")

        return msg

    def containItem(self, item):
        #API接口,提供一个函数给你用,应用编程接口
        bedArea = item.getBedArea()
        #此方法也可以用,但是有危险
        #bedArea = item.area

        if self.area > bedArea:
            self.rongNaList.append(item)
            self.area -= bedArea
            print("当前添加"+ item.getBedName() + "成功。。。当前可用面积" + str(self.area))
        else:
            print("error:当前物品需要的面积大于家可用的面积:" + item.getBedName())

    def turnOn(self):
        self.light = "on"
        #把家里的所有家具都变成“亮”的状态
        for temp in self.rongNaList:
            #调用这个方法,用来修改相关物品的“亮”的状态
            temp.setlight()
        return self.light

#定义一个 bed床 类
class Bed:

    def __init__(self, name, area):
        self.area = area
        self.name = name
        self.light = "off"

    def __str__(self):
        msg = self.name + "床占用的面积为:" + str(self.area)
        return msg

    def getBedArea(self):
        return self.area

    def getBedName(self):
        return self.name

    def setlight(self):
        self.light = "on"

    def setlightOff(self):
        self.light = "off"

home = Home(100)
print(home)

bed = Bed('席梦思', 4)
print(bed)

home.containItem(bed)
#bed.getBedArea()
print(home)

bed2 = Bed("木板床", 10)
home.containItem(bed2)
print(home)

bed3 = Bed("超级大的床",170)
home.containItem(bed3)
print(home)

home.turnOn()

print(home)
print(bed)
print(bed2)
print(bed3)

运行结果:

D:\1a\python3.6.1\python.exe E:/python_workspace/python_notes/example10-storeFurniture2.py
家当前可用的面积为100: 灯的状态为 off
席梦思床占用的面积为4
当前添加席梦思成功。。。当前可用面积96
家当前可用的面积为96: 灯的状态为 off; 当前有 : 席梦思
当前添加木板床成功。。。当前可用面积86
家当前可用的面积为86: 灯的状态为 off; 当前有 : 席梦思, 木板床
error:当前物品需要的面积大于家可用的面积:超级大的床
家当前可用的面积为86: 灯的状态为 off; 当前有 : 席梦思, 木板床
家当前可用的面积为86: 灯的状态为 on; 当前有 : 席梦思, 木板床
席梦思床占用的面积为4
木板床床占用的面积为10
超级大的床床占用的面积为170

保护属性:

采用下划线____ eg: self.__name, 这样的属性叫做私有属性

然后重新定义新方法

eg: def setNewage(self)

​ def getAge(self)

—del—()方法:

结束之前要做的事情

只要对象不用了,python解释器会自动调用该方法,python需要回收相关空间

del不会彻底删除,只有当引用计数为0的时候,才会彻底删除

继承:

来自于一个叫做单继承

来自于一个或者多个,则叫做多继承

父类也叫做基类

子类也叫做派生类

私有属性不会被继承。如果非要使用,就把下划线去掉

如果是用过继承来的方法访问私有属性,是可以的,如果是子类中,自定义了一个方法,此方法不可以访问

只要是私有,通过对象就不可以用,除非采用方法

class Animal(object):#object可写可不写
    ###
class Dog(Animal):
    ###

重写:

class Animal(object):
    def bark(self):
        ###
class Cat(Anlmal):
    def bark(self):
        Animal.bark(self)
        super().bark()
        ###

多继承–一个类可以有无穷多个父类:

先遍历直接继承的,然后找其兄弟, 类似与广度遍历

print(c.__ mro __): 可以查看C类的对象搜索方法时的先后顺序。只有python3中有

class Base (object):
  	def test(self):
      print("------------A test ------------------")

class A (Base):
  	def test(self):
      print("------------A test ------------------")
    def testA(self):
      print("------------A test ------------------")
      
class B (Base)
	def testB(self):
      print("------------B test ------------------")

class C(A, B):
  	pass

c = C()  
c.testA()
c.testB()
c.test()

多态:

调用的方法是同一个,但是执行的代码不一样

class Animal(object):
    def bark(self):
        print("啊啊~")


class Cat(Animal):
    def bark(self):
        print("喵喵~")


class Dog(Animal):
    def bark(self):
        print("汪汪~")

class roboot(object):
    def bark(self):
        print("嗡嗡嗡")

def animalBark(temp):
    temp.bark()

maomi = Cat()
wangcai = Dog()
animalBark(maomi)
animalBark(wangcai)

dingdang = roboot()
animalBark(dingdang)

================运行结果=========================
D:\1a\python3.6.1\python.exe E:/python_workspace/python_notes/example11-JiChen.py
喵喵~
汪汪~
嗡嗡嗡

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦