如何在 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.
解析顺序,如果作为显式数据公开,将是一个实现细节,而不是语言定义的接口的一部分。
在 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.
解析顺序,如果作为显式数据公开,将是一个实现细节,而不是语言定义的接口的一部分。