""" """ class Animal(object): def __init__(self,name,food): self.name = name self.food = food self.blood = 100 self.waise = 100 def eat(self): print(f"{self.name} eating {self.food}") def drink(self): print("hhh") def sleep(self): print("sss") class Cat(Animal): def eat(self): self.blood += 100 Animal.eat(self) def pashu(self): print("pashu") class Dog(Animal): def eat(self): self.waise += 100 Animal.eat(self) def kanjia(self): print("kanjia") c = Cat("小白","猫粮") c.eat() print(c.__dict__) """ 父类和子类方法的选择 子类的对象,如果去调用方法 永远先优先调用自己 如果自己有 用自己的 如果自己没有 用父类的 如果自己有还想用父类的:直接在子类方法中调用父类的方法 父类名.方法名(self) """ class Foo(object): def __init__(self): self.func() #在每一个self调用func时,我们不看这句话在哪里执行,只看self是谁 def func(self): print("in foo") class Son(Foo): def func(self): print("in son") Son() """ 多继承 """ class A(): def func(self): print("A") class B(A): def func(self): print("B") class C(A): def func(self): print("C") class D(B,C): def func(self): print("D") d = D() d.func() #在python3中总是广度优先走 #在python2中经典类总是深度优先走 在python2中新式类:括号里继承object 经典类:括号里没有object """ c3算法 A(O) = [AO] B(A) = [BAO] C(A) = [CAO] D(B) = [DBAO] E(C) = [ECAO] F(D,E) = c3(D(B) + E(C)) = [F] + [DBAO] + [ECAO] F = [DBAO] + [ECAO] FD = [BAO] + [ECAO] FDB = [AO] + [ECAO] FDBE = [AO] + [CAO] FDBEC = [AO] + [AO] FDBECA = [O] + [O] FDBECAO 算法内容 如果是单继承 那么总是按照从子类-》父类的顺序来计算查找顺序 如果是多继承,需要按照自己本类,父类1,父类2的继承顺序 merge规则: 如果一个类出现在从左到右所有顺序的最左侧,并且没有在其他位置出现,那么先提出来作为继承顺序中的一个 或者一个类出现在从左到右顺序的最左侧,并没有在其他顺序中出现,那么先提出来作为继承顺序中的一个 如果从左到右第一个顺序中的第一个类出现在后面且不是第一个,那么不能提取,顺序向后继续找其他顺序中符合上述条件的类 经典类-深度优先 新式类-广度优先 深度优先自己看 广度优先遵循c3算法,会用mro,会查看顺序 经典类没有mro,新式类有 """
标签:python,self,继承,func,print,父类,class,def From: https://www.cnblogs.com/moon3496694/p/17135473.html