为什么这个继承代码的行为不正确?

问题描述 投票:0回答:1
class Mammal(object):
  def __init__(self, name):
    print(name, "Is a mammal")

class canFly(Mammal):
  def __init__(self, canFly_name):
    print(canFly_name, "cannot fly")
    super().__init__(canFly_name)

class canSwim(Mammal):
  def __init__(self, canSwim_name):
    print(canSwim_name, "cannot swim")
    super().__init__(canSwim_name)

class canWagTail(Mammal):
  def __init__(self, canWag_name):
    print(canWag_name, "can wag tail")
    super().__init__(canWag_name)

class Animal(canFly, canSwim, canWagTail):
  def __init__(self, name):
    super().__init__(name)

Carol = Animal("Dog")

我认为这个多重多级继承代码会返回以下内容(父类的第一个找到的构造函数,就像任何其他方法一样):

Dog cannot fly
Dog is a mammal

但是结果如下:

Dog cannot fly
Dog cannot swim
Dog can wag tail
Dog Is a mammal 

有人可以解释一下构造函数调用是如何使用 super() 工作的吗?它会自动调用所有父构造函数吗?即使是这样,输出也应该是:

Dog cannot fly
Dog Is a mammal 
Dog cannot swim
Dog Is a mammal 
Dog can wag tail
Dog Is a mammal 

但事实显然不是这样。有人可以解释一下吗?

python oop inheritance multiple-inheritance
1个回答
0
投票

如果你想使用特定的构造函数,你可以直接调用它:

class Animal(canFly, canSwim, canWagTail):
  def __init__(self, name):
    canFly().__init__(name)
© www.soinside.com 2019 - 2024. All rights reserved.