Pythonの継承とは?単一継承と階層継承の基本をサンプルコードで解説
本記事では、Python 3.xにおける継承(インヘリタンス)とクラスの拡張方法について詳しく解説します。
継承とは、現実世界のモノや概念の関係性を自然に表現できる、オブジェクト指向プログラミングの中核となる仕組みです。継承を活用すると、次のようなメリットが得られます。
- 再利用性:すでに書いたコードを流用でき、重複を削減できる
- 推移性:クラス間の関係を連鎖的に引き継げる
- 開発速度の向上:ゼロから書かずに済むため、短期間で開発できる
- 保守性・拡張性:既存クラスを壊さずに機能を追加しやすい
継承の5つの種類
Pythonの継承は、その構造によって主に以下の5種類に分類されます。
- 単一継承(Single Inheritance)
- 多重継承(Multiple Inheritance)
- 階層継承(Hierarchical Inheritance)
- 多段継承(Multilevel Inheritance)
- 混合継承(Hybrid Inheritance)

上の図が示すとおり、継承とは、親クラスのオブジェクトを直接生成することなく、親クラスが持つ属性やメソッド(機能)を子クラスから利用できるようにする仕組みです。
本記事では、この中でも特によく使われる「単一継承」と「階層継承」の具体的な実装方法を、サンプルコード付きで見ていきましょう。
単一継承(Single Inheritance)
単一継承は、1つの親クラスから1つの子クラスを派生させる、最も基本的な継承形式です。子クラス側で親クラスのコンストラクタ(__init__)を明示的に呼び出すことで、親の初期化処理を引き継ぎます。
サンプルコード
# 親クラス
class Student():
# 親クラスのコンストラクタ
def __init__(self, name, enrollnumber):
self.name = name
self.enrollnumber = enrollnumber
def display(self):
print(self.name)
print(self.enrollnumber)
# 子クラス
class College( Student ):
def __init__(self, name, enrollnumber, admnyear, branch):
self.admnyear = admnyear
self.branch = branch
# 親クラスの__init__を呼び出す
Student.__init__(self, name, enrollnumber)
# 派生クラスのオブジェクトを生成
obj = College('Rohit', 42414802718, 2018, "CSE")
obj.display()
実行結果
Rohit 42414802718
この例では、Studentクラスを親として、入学年度(admnyear)や学科(branch)といった独自の属性を持つCollegeクラスを定義しています。Student.__init__(self, ...)を呼び出すことで、氏名と学籍番号の初期化処理を親クラスへ委譲している点がポイントです。
階層継承(Hierarchical Inheritance)
階層継承は、1つの親クラスから複数の子クラスを派生させる継承形式です。共通の基底クラスを複数のクラスで共有したい場合に特に有効です。
サンプルコード
# 親クラス
class Student():
# 親クラスのコンストラクタ
def __init__(self, name, enrollnumber):
self.name = name
self.enrollnumber = enrollnumber
def display(self):
print(self.name)
print(self.enrollnumber)
# 子クラス1
class College( Student ):
def __init__(self, name, enrollnumber, admnyear, branch):
self.admnyear = admnyear
self.branch = branch
# 親クラスの__init__を呼び出す
Student.__init__(self, name, enrollnumber)
# 子クラス2
class University( Student ):
def __init__(self, name, enrollnumber, refno, branch):
self.refno = refno
self.branch = branch
# 親クラスの__init__を呼び出す
Student.__init__(self, name, enrollnumber)
# 派生クラスのオブジェクトを生成
obj_1 = College('Rohit', 42414802718, 2018, "CSE")
obj_1.display()
obj_2 = University('Rohit', 42414802718, "st2018", "CSE")
obj_2.display()
実行結果
Rohit 42414802718 Rohit 42414802718
ここでは、同じStudentクラスを親として、CollegeクラスとUniversityクラスという2つの子クラスを定義しています。それぞれ異なる属性(入学年度/参照番号)を持ちながら、名前と学籍番号を扱う処理は親クラスから共通して受け継いでいます。これが階層継承の典型的な使い方です。
まとめ
本記事では、Pythonにおける継承の概要と、代表的な2つの形式である単一継承と階層継承の実装方法を学びました。親クラスの__init__を適切に呼び出すことで、コードの重複を抑えながら柔軟なクラス設計が可能になります。まずは身近なデータモデルで継承を試して、その再利用性の高さを実感してみてください。
-
Pythonのクラスと継承を徹底解説!基本構文からコード例まで
オブジェクト指向プログラミングは、プロジェクト内のコード重複(冗長化)を防ぐために、再利用可能なコードパターンを作成する手法です。その再利用性を実現する手段のひとつが継承(インヘリタンス)であり、サブクラスが基底クラスのコードを活用できる仕組みを指します。 継承とは何か 継承とは、あるクラスが別のクラス内に記述されたコードを引き継いで利用できるようにする仕組みです。 子クラス(サブクラス)と呼ばれるクラスは、親クラス(基底クラス)からメソッドや変数を受け継ぎます。 ChildサブクラスがParent基底クラスを継承している場合、ChildクラスはParentクラスのコードをそのまま再利用でき
-
Pythonのクラス継承とは?基本構文からオーバーライド・super()まで徹底解説
クラスの継承とはPythonでは、クラスをゼロから定義しなくても、すでに存在するクラス(親クラス)をもとにして新しいクラス(子クラス)を作り出せます。この仕組みを「継承(inheritance)」と呼びます。書き方はシンプルで、新しいクラス名の後ろに括弧を付け、その中に親クラス名を記述するだけです。子クラスは親クラスの属性やメソッドをすべて引き継ぎます。つまり、親クラスで定義された機能を、あたかも自分のクラス内で定義したかのように利用できるのです。さらに、子クラス側で親クラスのデータメンバやメソッドを上書き(オーバーライド)することも可能です。基本構文派生クラスの宣言方法は親クラスとほぼ同じで