用語比較
継承とsuper()・多重継承の探索順の違い|Python3エンジニア認定基礎試験で判断する
継承は、既存のクラスを土台に新しいクラスを定義する仕組みです。多重継承とsuper()が加わると「どのクラスのメソッドが呼ばれるのか」が分かりにくくなります。
公式チュートリアル9.5は、派生クラスで上書きしたメソッドから基底クラスのメソッドを使う簡単な方法としてBaseClassName.methodname(self, arguments)を挙げ、9.5.1は多重継承での属性の探索順とsuper()の関係を説明しています。
このページは、単一継承の探索、基底クラス名での直接呼び出し、多重継承の探索順を分けて整理します。クラスの章を学ぶ人が、「呼び出す先をどう決めるか」を切り分けるためのページです。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
継承(単一)
class DerivedClassName(BaseClassName):と書き、派生クラスに無い属性は基底クラスから探す。
基底クラス名での呼び出し
BaseClassName.methodname(self, arguments)で基底クラスのメソッドを直接呼ぶ。基底クラスがグローバルスコープの名前でアクセスできるときだけ動く。
多重継承の探索順
ほとんどのシンプルな場合は、深さ優先で左から右に探し、同じクラスは2度探索しない。実際は協調的なsuper()の呼び出しのため、メソッドの解決順序(MRO)は動的に決まる。
違いを表で確認
| 比較軸 | 継承(単一) | 基底クラス名での呼び出し |
|---|---|---|
| 基底クラスの数 | 単一継承: 基底クラスは1つ | 多重継承: class DerivedClassName(Base1, Base2, Base3):のように複数 |
| メソッドを拡張する方法 | 基底クラス名での呼び出し: BaseClassName.methodname(self, arguments)で、クラス名を書いて直接呼ぶ | super(): 公式チュートリアルは、協調的なsuper()の呼び出しのためにメソッドの解決順序が動的に変わると説明する |
| 属性の探索順 | 単一継承: 派生クラスで見つからなければ基底クラスを探す | 多重継承: Base1とその基底クラス、見つからなければBase2、という順で探す(シンプルな場合の見方) |
| 同じクラスが複数の経路で現れる場合 | 単一継承では、経路は1本 | ダイアモンド継承では、解決順序を線形化し、各祖先クラスを一度だけ扱う |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
派生クラスで上書きしたメソッドに、基底クラスの処理も残したい人
公式チュートリアルは、基底クラスのメソッドを置き換えるのではなく拡張したい場合に、BaseClassName.methodname(self, arguments)を呼ぶ方法を挙げています。ただし、基底クラスがグローバルスコープの名前でアクセスできるときだけ動きます。
多重継承で、どの基底クラスから探されるかを確かめたい人
シンプルな場合は、class DerivedClassName(Base1, Base2, Base3):の左のBase1から探し、次にBase1の基底クラス、それでも見つからなければBase2、と進むと考えられます。実際はもう少し複雑で、メソッドの解決順序は動的に決まります。
問題文から答えを選ぶ手順
- 1
基底クラスの数を確かめる
基底クラスが1つなら単一継承、複数ならクラス定義の括弧の中の並びが探索順の手がかりです。
- 2
呼び出しの書き方を確かめる
基底クラス名を書いて呼んでいれば直接呼び出し、super()を使っていれば解決順序にそった呼び出しです。
- 3
同じクラスが複数の経路で現れるかを確かめる
現れるならダイアモンド継承です。基底クラスが複数回アクセスされないよう、検索順序は線形化されます。
試験での見分け方
- 1基底クラスのメソッドを直接呼ぶ方法は、基底クラスがグローバルスコープの名前でアクセスできるときだけ動く。
- 2多重継承の探索は、シンプルな場合は深さ優先で左から右、同じクラスは2度探索しない。
- 3メソッドの解決順序は、協調的なsuper()の呼び出しのため動的に決まる。
- 4解決順序は、各クラスで指定された左から右の順序を崩さず、各祖先クラスを一度だけ扱う。
誤答しやすい選択肢
多重継承の探索順を、単純な深さ優先だけだと思い込む
修正: 公式チュートリアルは、それよりもう少し複雑だと述べています。協調的なsuper()の呼び出しのため、メソッドの解決順序は動的に変わります。
super()は単一継承でしか意味がないと考える
修正: 公式チュートリアルは、動的順序付けが必要なのは、多重継承ではダイアモンド継承が必ず見られるためだと説明しています。super()は多重継承と深く関わります。
基底クラス名での呼び出しを、どこでも使えると考える
修正: 公式チュートリアルは、この呼び出し方が動作するのは、基底クラスがグローバルスコープのBaseClassNameという名前でアクセスできるときだけだと述べています。
確認問題
Q1class DerivedClassName(Base1, Base2, Base3):で、属性がDerivedClassNameで見つからないとき、シンプルな場合にまず探されるのはどれですか?
答え: Base1(とその基底クラス)
公式チュートリアルは、まずBase1から検索され、再帰的にBase1の基底クラスから検索され、それでも見つからなければBase2から検索されると説明しています。
Q2継承の階層の中で同じクラスが複数回現れる多重継承の形を何といいますか?
答え: ダイアモンド継承
公式チュートリアルは、同じクラスが複数出てくる場合に2度探索しない、と説明しています。
Q3基底クラスのメソッドを直接呼ぶBaseClassName.methodname(self, arguments)が動作する条件はどれですか?
答え: 基底クラスがグローバルスコープのBaseClassNameという名前でアクセスできるとき
公式チュートリアル9.5が、この条件を明記しています。
到達チェック
- 派生クラスから基底クラスのメソッドを呼ぶ2つの書き方を言い分けられる
- 多重継承の探索が、シンプルな場合は深さ優先で左から右だと説明できる
- メソッドの解決順序が、協調的なsuper()の呼び出しのため動的に決まると説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- Python3エンジニア認定基礎試験と生成AIアドバイザー認定試験の違い|出題範囲・試験時間・受験料で比較
Python3エンジニア認定基礎試験と生成AIアドバイザー認定試験の違いを、出題範囲、問題数と試験時間、受験料、受験方式、合格基準で比較します。Pythonの文法を学ぶ試験と、生成AIを業務で使う力を測る試験のどちらを先に受けるかを決められます。
- enumerate()とrange(len())の違い(ループで添字を使う書き方)
Pythonのenumerate()とrange(len())の違いを、書き方、戻り値、開始番号、公式チュートリアルの位置づけから実行結果つきで比較します。Python3エンジニア認定基礎試験での見分け方と確認問題も示します。
- *args と **kwargs の違い(位置引数のまとめ受けとキーワード引数のまとめ受け)
関数定義の *args と **kwargs の違いを、タプルと辞書で受け取る点、並び順の決まり、呼び出し側の * と ** によるアンパックまで、Python3基礎試験の判断手順と確認問題つきで解説します。
よくある質問
Q多重継承の属性の探索順は?
公式チュートリアルは、ほとんどのシンプルな場合は深さ優先で左から右、同じクラスは2度探索しないと考えられると説明しています。実際はそれよりもう少し複雑です。
Qダイアモンド継承とは?
継承の階層の中で同じクラスが複数出てくる形です。少なくとも1つの祖先クラスに、最下位クラスから到達する経路が複数ある状態を指します。
Q基底クラスのメソッドを拡張するには?
公式チュートリアルは、BaseClassName.methodname(self, arguments)を呼び出す簡単な方法を挙げています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
