python中的MRO具有对super()__init__的调用的多重继承

时间:2020-09-21 08:23:29

标签: python-3.x oop inheritance

在我开始使用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 ()函数有关还是相同的行为也代表其他方法?

0 个答案:

没有答案