【发布时间】:2021-03-05 12:41:42
【问题描述】:
有人可以解释给定代码的输出以及在这种情况下 python MRO 是如何工作的吗?
class A(object):
def go(self):
print("go A go!")
class B(A):
def go(self):
super(B, self).go()
print("go B go!")
class C(A):
def go(self):
super(C, self).go()
print("go C go!")
class D(C, B):
def go(self):
super(D, self).go()
print("go D go!")
d = D()
d.go()
输出:
go A go!
go B go!
go C go!
go D go!
按照从左到右和深度我会说应该是:
go A go!
go C go!
go D go!
但它似乎不像我想的那样工作。
【问题讨论】:
-
如果您在每次超级调用之前和之后打印可能会更清晰
-
我明白但仍然不明白如何调用 B 方法。即使是这样,为什么不用另一个 A 调用呢?
-
在每次超级调用之前添加这些打印,然后您将能够看到从哪里调用 A.go() - 使用结果更新您的问题。
标签: python oop inheritance multiple-inheritance method-resolution-order