“mro()”在Python中做什么?

在django.utils.functional.py中:

for t in type(res).mro():#<-----this
    if t in self.__dispatch:
        return self.__dispatch[t][funcname](res, *args, **kw)

我不明白mro。
“mro()”是什么?
mro是什么意思?

跟着…:

>>> class A(object): pass
... 
>>> A.__mro__
(<class '__main__.A'>, <type 'object'>)
>>> class B(A): pass
... 
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
>>> class C(A): pass
... 
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <type 'object'>)
>>> 

只要我们有单继承,__mro__只是元组:类,它的基地,它的基地的基地,等等up to对象(当然只适用于新式类)。

现在,使用多重继承…:

>>> class D(B, C): pass
... 
>>> D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)

…你还得到保证,在__mro__中,没有类重复,没有类在其祖先之后,保存首先在同一级别的多重继承(例如在这个例子中的B和C)进入的类是在__mro__从左到右。

在类的实例上获得的每个属性,不仅仅是方法,在概念上沿着__mro__查找,因此,如果祖先中有多个类定义了该名称,这将告诉你在第一个类中找到该属性的位置在定义该名称的__mro__中。

http://stackoverflow.com/questions/2010692/what-does-mro-do-in-python

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:“mro()”在Python中做什么?