演習課題「継承関係の確認」
右側のコードエリアには、クラス PaizaBook
が用意されています。
このクラス PaizaBook
の継承関係を出力してください。
期待する出力値
(<class '__main__.PaizaBook'>, <class '__main__.Laptop'>, <class '__main__.PersonalComputer'>, <class 'object'>)
※有料会員になるとこの動画をご利用いただけます
詳しい説明を読む
#09:クラスの継承関係を調べる (__mro__)
このチャプターでは、クラスの継承関係を調べる方法を学習します。
__mro__
で取得できる値に現われるすべてのクラスが、自身より右側のクラスをすべて継承しているとは限らないclass Sample1:
pass
class Sample2(Sample1):
pass
class Sample3(Sample1):
pass
class Sample4(Sample2, Sample3):
pass
print(Sample4.__mro__)
- Sample4, Sample2, Sample3, Sample1, object の順番で出力されるが、Sample2 が Sample3 を継承しているわけではない
__mro__
は Method Resolution Order の略称- これは、あるメソッドが呼び出されたときに、どの順番でメソッドを探すか、という順番を示している
- つまり、上のTipsのコードを例にとると、
- Sample4 クラスのインスタンスが生成されて、test というメソッドが呼び出されたとする
- Sample4 クラスに test メソッドがあるか確認する (あれば探索終了)
- Sample2 クラスに test メソッドがあるか確認する (あれば探索終了)
- Sample3 クラスに test メソッドがあるか確認する (あれば探索終了)
- Sample1 クラスに test メソッドがあるか確認する (あれば探索終了)
- object クラスに test メソッドがあるか確認する (あれば探索終了)
- test という名前のメソッドはなかったためエラーを発する
という流れでメソッドの探索がおこなわれる
ログインすると採点できます
コードの実行