我的程序是这样的:
class A():
def go(self):
print("A")
class B(A):
def go(self):
super().go()
print("B")
class C(A):
def go(self):
super().go()
print("C")
class D(A):
def go(self):
super().go()
print("D")
class E(B, C, D):
def go(self):
super().go()
print("E")
a = A()
b = B()
c = C()
d = D()
e = E()
print(e.go())
以下是此输出:
A
D
C
B
E
None
我很好奇super()的工作流程,它如何在B之前打印D,C,为什么最后打印无?非常感谢详细解释。
答案 0 :(得分:2)
如果您致电help(e)
,则可以看到method resolution order:
>>> e = E()
>>> help(e)
class E(B, C, D)
| Method resolution order:
| E
| B
| C
| D
| A
| builtins.object
由于您先拨打super
然后print
,因此输出将完全相反mro
:
A -> D -> C -> B -> E
如果您在print
之前有super
个电话,那么它将跟随MRO:
E -> B -> C -> D -> A
然而,E.go
并未返回任何内容(如果之前没有其他return None
,return
是隐式的),那么它将在之后打印None
已经调用了所有方法。