“mro()”是做什么的?
回答问题 mro()有什么作用? 来自django.utils.functional的示例: for t in type(res).mro(): # <----- this if t in self.__dispatch: return self.__dispatch[t][funcname](res, *args, **kw) Answers 跟着...: >>> class A(object)
·
回答问题
mro()
有什么作用?
来自django.utils.functional
的示例:
for t in type(res).mro(): # <----- this
if t in self.__dispatch:
return self.__dispatch[t][funcname](res, *args, **kw)
Answers
跟着...:
>>> 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__
就是以下的元组:类、它的基类、它的基类,等等直到object
(当然只适用于新式类)。
现在,使用 multiple 继承...:
>>> 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__
中。
更多推荐
已为社区贡献126473条内容
所有评论(0)