簡體   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