在我开始使用Python时,请与我同在。
假设我有多个继承方案:
class Animal:
def __init__(self, Animal):
print(Animal, 'is an animal.');
class Mammal(Animal):
def __init__(self, mammalName):
print(mammalName, 'is a warm-blooded animal.')
super().__init__(mammalName)
class NonWingedMammal(Mammal):
def __init__(self, NonWingedMammal):
print(NonWingedMammal, "can't fly.")
super().__init__(NonWingedMammal)
class NonMarineMammal(Mammal):
def __init__(self, NonMarineMammal):
print(NonMarineMammal, "can't swim.")
super().__init__(NonMarineMammal)
class Dog(NonMarineMammal, NonWingedMammal):
def __init__(self):
print('Dog has 4 legs.');
super().__init__('Dog')
d = Dog()
在打印时,我得到了:
Dog has 4 legs.
Dog can't swim.
Dog can't fly.
Dog is a warm-blooded animal.
Dog is an animal.
从Dog类调用 init ()时,将调用 NonMarineMammal 的 init (),因为MRO开头为多继承情况下子类的最左基类。
同样, NonMarineMammal 的 init ()称为其super()的 init (),即 Mammal 。
所以我感到困惑的是为什么我
Dog can't fly.
代替
Dog is a warm-blooded animal.
为什么不遵循上述顺序?与 init ()函数有关还是相同的行为也代表其他方法?