繁体   English   中英

如何在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__'

我了解,如果我们转换为“新”样式的对象(从object继承),则此问题将消失:

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

但是我的用例是在pdb ,并且我正在处理许多需要大量重构的对象,是否有任何方法可以使用旧式类访问MRO?

老式类没有明确的解析顺序。 相反,方法解析取决于父类集的传递闭包。

来自Python 2.3方法解析顺序 (重点是我):

首先,让我指出,我要说的仅适用于Python 2.2中引入的新样式类: 经典类保持其旧方法的解析顺序,即深度,然后从左至右

如果将解决顺序作为根本数据公开,则解决顺序将是实现细节,而不是该语言所定义接口的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM