2017-08-30 80 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'>]