# # python3默认是广度优先,先找自己的方法或属性,如果没,往父类找 # class Animal: # def __init__(self): # print('执行Animal.__init__') # self.func() # # def eat(self): # print('%s eating' %self.name) # # def drink(self): # print('%s drinking' % self.name) # # def func(self): # print('Animal.func') # # class Dog(Animal): # def guard(self): # print('guarding') # # def func(self): # 重写父类方法,派生方法 # print('Dog.func') # # class Bird(Animal): # def __init__(self, name): # # Animal.__init__(self) # 父类名.方法名 需要自己传self参数 # super().__init__() # super().方法名 不需要自己传self,这是新式类 # self.name = name # 派生属性 # def lay(self): # print('laying') # # # # print(Dog.__bases__) # 查看父类 # # dog = Dog() # 这里Dog没有init方法,会调用父类的init # bird = Bird('ssss') # # bird.lay() # bird.drink() # # bird.eat()
# 新式类默认广度优先,经典类是深度优先 # super 只在python3中存在 # super的本质 :不是单纯找父类 而是根据调用者的节点位置的广度优先顺序来的 class A: def func(self): print('A') class B(A): pass def func(self): super().func() print('B') class C(A): pass def func(self): super().func() print('C') class D(B, C): pass def func(self): super().func() print('D') d = D() d.func() print(B.mro())