回答问题

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__中。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐