Python 模擬試験

Python実践 模擬試験 第1回 問12・4章 Pythonのクラス(継承)

多重継承と MRO

次のコードを実行したときの出力として、正しいものを1つ選べ。

class A:
    def f(self): return "A"
class B(A): pass
class C(A):
    def f(self): return "C"
class D(B, C): pass
print(D().f(), [k.__name__ for k in D.__mro__])
  1. A

    C ['D', 'B', 'C', 'A', 'object']

  2. B

    A ['D', 'B', 'A', 'C', 'object']

  3. C

    C ['D', 'B', 'A', 'C', 'object']

  4. D

    A ['D', 'B', 'C', 'A', 'object']

正解と解説を見る

正解:A

多重継承の探索順序(MRO)は C3 線形化で決まり、クラス.__mro__ で確認できる。

順実行する行実行後の変数
1`class A:`—
2└ `def f(self): return "A"`—
3`class B(A): pass`—
4`class C(A):`—
5└ `def f(self): return "C"`—
6`class D(B, C): pass`—
7`print(D().f(), [k.__name__ for k in D.__mro__…`—
結果実際の出力C ['D', 'B', 'C', 'A', 'object']

学習のポイント:ダイヤモンド継承でも、親は子より後に来る。

この問題を演習で解く →

問題一覧へ

このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。