python 多重継承するときは__mro__を使おう

久しぶりにpythonの話。JavaScriptはややこしくて、pythonが恋しくなったので、ぽちぽちとdjango書いてます。

さて、話はクラスの継承の話。

pythonがクラスの多重継承を仕様に含んでいるのはご存じだと思います。そして、多重継承というと、必ず話題になるのが、菱形継承問題です。

pythonではそんな、菱形継承問題に対応するために、クラスが「__mro__」という特殊属性を持っており、これを参照することでメソッドを解決する際に基底クラスをたどっていく順序が分かるようになっている。

例えば、

print(Class.__mro__)

とすると、

(<class '__main__.C'>,<class '__main__.B'>,<class '__main__.A'>

こんな感じで結果が表示されて、このClassというクラスでは、C→B→Aといった順番で、メソッドを探しに行くというのがわかります。

ちなみに、__mro__というのは、「Method Resolution Order」の略です。

この記事が気に入ったらサポートをしてみませんか?