AI資格ドリル
資格を選ぶ↓

用語比較

継承と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冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

派生クラスで上書きしたメソッドに、基底クラスの処理も残したい人

公式チュートリアルは、基底クラスのメソッドを置き換えるのではなく拡張したい場合に、BaseClassName.methodname(self, arguments)を呼ぶ方法を挙げています。ただし、基底クラスがグローバルスコープの名前でアクセスできるときだけ動きます。

02

多重継承で、どの基底クラスから探されるかを確かめたい人

シンプルな場合は、class DerivedClassName(Base1, Base2, Base3):の左のBase1から探し、次にBase1の基底クラス、それでも見つからなければBase2、と進むと考えられます。実際はもう少し複雑で、メソッドの解決順序は動的に決まります。

問題文から答えを選ぶ手順

  1. 1

    基底クラスの数を確かめる

    基底クラスが1つなら単一継承、複数ならクラス定義の括弧の中の並びが探索順の手がかりです。

  2. 2

    呼び出しの書き方を確かめる

    基底クラス名を書いて呼んでいれば直接呼び出し、super()を使っていれば解決順序にそった呼び出しです。

  3. 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()の呼び出しのため動的に決まると説明できる

同じ資格で次に知りたいこと

よくある質問

Q多重継承の属性の探索順は?

A

公式チュートリアルは、ほとんどのシンプルな場合は深さ優先で左から右、同じクラスは2度探索しないと考えられると説明しています。実際はそれよりもう少し複雑です。

Qダイアモンド継承とは?

A

継承の階層の中で同じクラスが複数出てくる形です。少なくとも1つの祖先クラスに、最下位クラスから到達する経路が複数ある状態を指します。

Q基底クラスのメソッドを拡張するには?

A

公式チュートリアルは、BaseClassName.methodname(self, arguments)を呼び出す簡単な方法を挙げています。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)