Python3多重继承:可以在一个子构造函数中调用所有的超级构造函数吗?

Python3 multiple inheritance: can call all super constructors at one sub constructor?

我可以在 D's __init__ 方法中调用 A, B, C's __init__ 吗?下面Dclass只调用了C's __init__.

class A:
    def __init__(self, a='a'):
        print("Constructor A")
        self.a = a

class B:
    def __init__(self, b='b'):
        print("Constructor B")
        self.b = b

class C:
    def __init__(self, c='c'):
        print("Constructor C")
        self.c = c

class D(C, B, A):
    def __init__(self):
        super().__init__()

    def run(self):
        return self.b

d = D()
print(d.run)

如果您了解所有超级classes,您可以显式调用这些方法。

class D(C, B, A):
  def __init__(self):
    A.__init__(self)
    B.__init__(self)
    C.__init__(self)

我们甚至可以使用 __mro__ 自动执行此操作以获得所有超级classes。

class D(C, B, A):
  def __init__(self):
    for cls in self.__class__.__mro__[1:]:
      cls.__init__(self)

MRO 代表“方法解析顺序”。它是给定 class 的继承层次结构中所有 class 的列表,按照 super() 看到它们的顺序。对于您的 class D,它是 [D, C, B, A, object]。我们使用 [1:] 从列表中删除 D(因为调用 D.__init__ 会导致无限递归)。