「mro()」は何をしますか? 質問する

「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)

ベストアンサー1

フォローしてください...:

>>> 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(もちろん、新しいスタイルのクラスでのみ機能します)。

さて、複数継承...:

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

おすすめ記事