【问题标题】:Method resolution in multiple inheritance in Python [duplicate]Python中多重继承中的方法解析[重复]
【发布时间】:2017-02-13 22:46:50
【问题描述】:

我试图了解多重继承中的方法解析顺序。 这是我正在使用的代码。当我尝试创建“ClassC”类的对象时,只调用了 ClassA 的构造函数。在这种情况下,方法是如何解决的?

class ClassA:
    def __init__(self):
        print "inside a's init"

class ClassB:
    def __init__(self):
        print "inside b's init"

class ClassC(ClassA,ClassB):
    pass

c = ClassC()

输出:

inside a's init

【问题讨论】:

  • 您应该在 Python 2 中使用新式类,例如 class ClassA(object):(在 Python 3 中,所有类都是新式)。然后将super(ClassA, self).__init__()添加到ClassA.__init__方法中。 (您也可以向ClassB 添加类似的调用,但这不是必需的,因为ClassBClassC 的继承链的末端)。如果 Python 核心开发人员 Raymond Hettinger 在链接问题中的回答不能完全回答您的问题,请告诉我。
  • 这很有用 @PM2Ring 。谢谢

标签: python multiple-inheritance method-resolution-order


【解决方案1】:

我相信有一个 python PEP 详细介绍了 MRO 算法,但它相当复杂。此外,它在 Fluent Python 一书中进行了介绍。我相信短篇小说是从左到右的

如果你切换到

class ClassC(ClassB,ClassA):
    pass

我打赌你会看到变化。 (更新,你肯定会看到变化)

如果你打电话给

help(c)

您应该会看到打印出的 mro。

【讨论】:

  • 是的。那行得通。但是,我的用例与调用第二类的构造函数没什么不同。解决了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2014-03-06
  • 2016-09-03
  • 2019-12-05
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
相关资源
最近更新 更多