Pythonの継承とは?親クラス・子クラスの関係とメソッドオーバーライドをやさしく解説
生徒
「Pythonで同じようなクラスを何個も作ると大変なんですが、楽に書く方法はありますか?」
先生
「そのときに役立つのが、Pythonの継承という考え方です。共通部分をまとめて管理できます。」
生徒
「親クラスとか子クラスって聞いたことはありますが、正直よくわかりません…」
先生
「では、身近なたとえを使いながら、Pythonの継承とメソッドオーバーライドを順番に見ていきましょう。」
1. Pythonの継承とは何か?
Pythonの継承とは、すでにあるクラスの機能を引き継いで、新しいクラスを作る仕組みです。元になるクラスを親クラス、引き継いで作られるクラスを子クラスと呼びます。
たとえば「動物」という共通の特徴を持つものがあり、その中に「犬」や「猫」がある、というイメージです。鳴く、食べるといった共通の動作は親クラスにまとめることで、同じコードを何度も書かずにすみます。
2. 親クラスと子クラスの基本的な関係
親クラスは「共通ルールや基本機能」を持ち、子クラスはそれを受け継ぎつつ、自分専用の機能を追加できます。Pythonではクラス名の後ろに丸かっこを書いて親クラスを指定します。
class Animal:
def speak(self):
print("なにかの鳴き声")
class Dog(Animal):
pass
この例では、DogクラスはAnimalクラスを継承しています。Dogクラスには何も書いていませんが、Animalクラスのspeakメソッドを使うことができます。
3. 継承すると何が便利なのか
継承の最大のメリットは、コードの再利用です。同じ処理を何度も書かなくてよくなり、修正も一か所で済みます。プログラムが長くなっても、管理しやすくなります。
また、共通のルールを親クラスにまとめることで、プログラム全体の構造が整理され、読みやすくなるという利点もあります。
4. 子クラスでメソッドをそのまま使う例
子クラスは、親クラスのメソッドをそのまま使えます。実際に呼び出してみましょう。
dog = Dog()
dog.speak()
なにかの鳴き声
Dogクラスにはspeakメソッドを書いていませんが、親クラスの処理がそのまま実行されています。
5. メソッドオーバーライドとは
メソッドオーバーライドとは、親クラスにあるメソッドを、子クラス側で上書きすることです。同じ名前のメソッドを子クラスで定義すると、子クラスの処理が優先されます。
犬なら犬らしい鳴き声にしたい、という場合に使います。
class Dog(Animal):
def speak(self):
print("ワンワン")
6. オーバーライドしたメソッドの動き
同じようにspeakメソッドを呼び出してみます。
dog = Dog()
dog.speak()
ワンワン
このように、親クラスの処理ではなく、子クラスで定義した内容が実行されます。これがメソッドオーバーライドです。
7. 親クラスの処理も使いたい場合
子クラスで処理を追加しつつ、親クラスの内容も使いたいことがあります。そのときはsuper()を使います。super()は「親クラスのメソッドを呼び出すための仕組み」です。
class Dog(Animal):
def speak(self):
super().speak()
print("ワンワン")
これにより、親クラスの処理のあとに、子クラス独自の動作を追加できます。
8. 初心者がつまずきやすいポイント
継承でよくある間違いは、「どのクラスのメソッドが呼ばれているのかわからなくなる」ことです。クラスの関係を紙に書いたり、親と子の役割をはっきり意識すると理解しやすくなります。
また、何でも継承で解決しようとせず、「共通部分だけを親クラスにまとめる」という考え方を大切にすると、読みやすいPythonプログラムになります。