【发布时间】:2019-11-04 23:49:26
【问题描述】:
我有这段代码,其中使用了超级继承和多重继承。 类的结果是:
go A go!
go C go!
go B go!
go D go!
虽然我期望:
go A go!
go B go!
go D go!
根据我的理解:D因为MRO调用B类,因为go是在B中实现的。B类调用其父A的super。A被执行,没关系。然后我希望 B 继续执行,所以这意味着 B 被执行,最后 D 被执行。 但这当然是不正确的。为什么它进入C,因为go方法的定义在B中找到,然后它不应该再在C中搜索。这就是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(B,C):
def go(self):
super(D, self).go()
print("go D go!")
a = A()
b = B()
c = C()
d = D()
d.go()
【问题讨论】:
-
我认为搜索方法的类列表是在执行任何方法之前构建的。您似乎假设此列表是在执行方法时动态确定的。
标签: python python-3.x super method-resolution-order