【问题标题】:Method Resolution Order Error方法解析顺序错误
【发布时间】:2024-01-02 11:58:01
【问题描述】:

这更像是一个好奇的问题,而不是一个严肃的问题:

我在玩多重继承时遇到了这个问题:

>>> class A(object):
...     def __init__(self): print "A.__init__() called"
...
>>> class B(object, A): pass
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Cannot create consisten method resolution
order (MRO) for bases object, A

我收到了TypeError。但是,当我颠倒多重继承的顺序时:

>>> class B(A, object): pass
>>> b = B()
A.__init__() called

它工作正常。我假设在第一种情况下,objectA 之前的继承会产生某种名称歧义。有人愿意解释这里发生了什么吗?

【问题讨论】:

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


    【解决方案1】:

    A 继承自objectobject 的子类,它不起作用。 MRO 保证最左边的碱基在最右边的碱基之前被访问——但它也保证在祖先中,如果 x 是 y 的子类,那么 x 在 y 之前被访问。在这种情况下,不可能同时满足这两个保证

    这是一个类似的问题

    Python: Problem with metaclasses in conjunction multiple inheritance

    【讨论】: