python 的多重继承

multiple inheritance of python

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

根据解释,是因为:

Inside __init__ of First super(First, self).__init__() calls the __init__ of Second, because that is what the MRO dictates!

他是什么意思?为什么调用 First super __init__ 会调用 Second 的 __init__?我认为第一与第二无关?

据说:"because that is what the MRO dictates",我看了https://www.python.org/download/releases/2.3/mro/ 但仍然没有头绪。

谁能解释一下?

单个 classes 的 MRO(方法解析顺序)是什么并不重要。唯一重要的事情(如果你使用 super)是你调用方法的 class 的 MRO。

因此,当您调用 Third.__init__ 时,它将跟随 Third.mro,即 Third, First, Second, object:

>>> Third.mro()
[__main__.Third, __main__.First, __main__.Second, object]

所以任何 super 都会在 MRO 中查找下一个超级 class,而不是实际 class 的超级 class 你 "in".