Python的多重继承



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

相关内容

  • 没有找到相关文章

最新更新