【发布时间】:2018-07-13 13:39:42
【问题描述】:
我对解释以下代码的 MRO 和 C3 线性化算法感到困惑,请您帮帮我吗?
class A(object):
def go(self):
print("A")
class B(A):
def go(self):
super(B, self).go()
print("B")
class C(A):
def go(self):
# super(C, self).go()
print("C")
class D(B, C):
def go(self):
super(D, self).go()
print("D")
d = D()
d.go()
pprint.pprint(D.__mro__)
The Result is:
C
B
D
(<class '__main__.D'>,
<class '__main__.B'>,
<class '__main__.C'>,
<class '__main__.A'>,
<class 'object'>)
另一个例子是:如果我在C类中取消注释super语句,在B类中注释super语句,结果将是“B D”,没有C和A。为什么?!!!!!! (我确实理解深度优先,从左到右的规则,但是……)
【问题讨论】:
-
为什么把C的super call注释掉了? up变量/打印的目的是什么?
-
还有不懂的地方请解释一下。鉴于您发布的代码,输出是我所期望的,因此您需要更清楚您期望的不同之处以及原因。
-
我只是想很好地理解多重继承。所以我尝试了不同的条件来查看结果。
标签: python method-resolution-order