1. ホーム
  2. python

[解決済み] mro()」は何をするものですか?

2022-04-28 11:59:24

質問

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" は何を意味するのでしょうか?

どのように解決するのですか?

フォローする...:

>>> 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__ その名前を定義している