2017-08-30 83 views
-2

在python3,我們可以使用'__mro__'獲得方法解析順序如下圖所示:如何知道MRO在python2

>>> class a: 
...  pass 
... 
>>> a.__mro__ 
(<class '__main__.a'>, <class 'object'>) 
>>> 

是否python2有這種替代方法?我試圖找到一個,但失敗了。

>>> class a: 
...  pass 
... 
>>> dir(a) 
['__doc__', '__module__'] 
>>> class a(object): 
...  pass 
... 
>>> dir(a) 
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 
+0

'__mro__'不在dir(a)中。但是,無論如何,您只能使用.__ mro__。 – TDSS

回答

0

mro()可因爲Python 2.2(https://www.python.org/download/releases/2.3/mro/

然而,類必須是一個新的樣式類。

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

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