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中查找下一个超类,而不是您所在的实际类的超类。

10-04 21:21