在Python的Super()中如何使用多个继承?一个答案解释了为什么在此示例中的原因:
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
根据解释,是因为:
First
super(First, self).__init__()
的__init__
内部调用Second
的__init__
,因为这是MRO的要求!
他是什么意思?为什么第一个呼叫超级__init__
会调用第二个__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中查找下一个超级类别,而不是您"在"中的实际类的超级类别。