如何在 Python 2.7 中查看 MRO(方法解析顺序)?

How to check MRO (Method Resolution Order) in Python 2.7?

在 Python 3 中我可以执行以下操作:

>>> class A:
...     pass
...
>>> A.mro()
[<class '__main__.A'>, <class 'object'>]

但是在 Python 2.7.16 中我得到一个 AttributeError:

>>> class A:
...     pass
...
>>> A.mro()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute 'mro'
>>> A.__mro__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute '__mro__'

我知道如果我们转换为 "new" 样式对象(继承自 object),这个问题就会消失:

>>> class A(object):
...     pass
...
>>> A.mro()
[<class '__main__.A'>, <type 'object'>]

但是我的用例在 pdb 中,我正在处理很多需要大量重构的对象,有什么方法可以使用旧式 类 访问 MRO?

老式没有明确的解析顺序类;相反,方法解析取决于父集 类.

的传递闭包

来自 The Python 2.3 Method Resolution Order(强调我的):

First of all, let me point out that what I am going to say only applies to the new style classes introduced in Python 2.2: classic classes maintain their old method resolution order, depth first and then left to right.

解析顺序,如果作为显式数据公开,将是一个实现细节,而不是语言定义的接口的一部分。