在How does Python's super() work with multiple inheritance?中
一个答案说明了此示例的原因:
class First(object):
def __init__(self):
super(First, self).__init__()
print "first"
class Second(object):
def __init__(self):
super(Second, self).__init__()
print "second"
class Third(First, Second):
def __init__(self):
super(Third, self).__init__()
print "that's it"
答案是:
>>> x = Third()
second
first
that's it
根据解释,这是因为:
在
__init__
的First
内部调用super(First, self).__init__()
的__init__
,因为这是MRO规定的!他什么意思?为什么调用First super
Second
将调用Second __init__
?我认为第一与第二无关吗?据说:“因为这就是MRO的要求”,我读了https://www.python.org/download/releases/2.3/mro/
但还是没有头绪。
有人可以解释吗?
最佳答案
各个类的MRO(方法解析顺序)无关紧要。唯一重要的问题(如果使用super
)是调用该方法的类的MRO。
因此,当您调用Third.__init__
时,它将跟随Third.mro
,即Third, First, Second, object
:
>>> Third.mro()
[__main__.Third, __main__.First, __main__.Second, object]
因此,任何
super
都会在MRO中查找下一个超类,而不是您所在的实际类的超类。