我正在查看钻石问题并得到一个问题:
class A:
def __init__(self):
print("This is class A")
class B(A):
def __init__(self):
print("This is class B")
super().__init__()
class C(A):
def __init__(self):
print("This is class C")
super().__init__()
class D(B, C):
def __init__(self):
print("This is class D")
super().__init__()
i = D()
Run Code Online (Sandbox Code Playgroud)
This is class D
This is class B
This is class C
This is class A
Run Code Online (Sandbox Code Playgroud)
它按预期工作,这很好,但我想知道为什么super().__init__()inclass B不去class A而是 C 被调用。
如果一个类有一个 super() 并且它继承自一个父类,它应该去那里。
如果我在 B 上删除它,代码将不会到达 C 或 A。
我知道 MRO 以及它是如何按预期进行的:
>>> …Run Code Online (Sandbox Code Playgroud)