Pythonの継承とは?親クラス・子クラスの関係とメソッドオーバーライドをやさしく解説
生徒
「Pythonの“継承”って何ですか?親クラスとか子クラスってどういう意味なんですか?」
先生
「Pythonの継承は、あるクラスの特徴や機能を別のクラスに引き継ぐ仕組みのことだよ。親クラスは元になるクラスで、子クラスはそれを受け継ぐクラスなんだ。」
生徒
「なるほど…。でも実際にどうやって使うのか、ちゃんと理解したいです!」
先生
「それでは、Pythonの継承、親クラス・子クラスの関係、そしてメソッドオーバーライドの基本を一緒に学んでいこう!」
1. Pythonの継承(けいしょう)とは?初心者向けにわかりやすく解説
Python(パイソン)における継承(Inheritance)とは、すでにあるクラスで作った「機能」や「変数」を、別の新しいクラスにそのまま引き継ぐ仕組みのことです。プログラミング未経験の方でも、「設計図のコピー&カスタマイズ」と考えればイメージしやすいでしょう。
継承を利用する最大のメリットは、コードの再利用ができる点です。同じコードを何度も書く手間(DRY原則:Don't Repeat Yourself)を省き、効率的にプログラムを拡張できます。また、共通部分を親にまとめておくことで、後から修正が必要になった際も1箇所の変更で済むため、保守性が飛躍的に向上します。
たとえば「動物」という大きな設計図(親クラス)があるとします。
- 親クラス(動物): 「鳴く」「食べる」といった共通の動作を持つ。
- 子クラス(犬): 親の動作を引き継ぎつつ、「ワンワンと鳴く」「お手をする」という個別の特徴を加える。
- 子クラス(猫): 親の動作を引き継ぎつつ、「ニャーと鳴く」「爪を研ぐ」という個別の特徴を加える。
このように、「共通の基本機能」をベースに「特定の個性」を付け足していくのが継承の役割です。次のセクションでは、実際にどのようにPythonでコードを記述するのか、具体的な書き方を見ていきましょう。
2. 親クラスと子クラスの基本的な書き方
Pythonで継承を使うには、子クラスの定義のときにカッコ内に親クラスを指定します。
class Animal:
def speak(self):
print("何かの動物が鳴いています。")
class Dog(Animal):
pass
この例では、Animalが親クラス、Dogが子クラスです。DogはAnimalの機能をそのまま使うことができます。
3. 継承したクラスを使ってみよう
さきほどのクラスを使って、実際にオブジェクトを作ってみます。
dog = Dog()
dog.speak()
何かの動物が鳴いています。
Dogクラスは何も書かれていませんが、Animalクラスを継承しているので、speakメソッドをそのまま使えます。
4. メソッドオーバーライドとは?
メソッドオーバーライドとは、親クラスのメソッドを子クラスで上書きすることです。親クラスの動作を自分用にカスタマイズしたいときに使います。
class Dog(Animal):
def speak(self):
print("ワンワン!")
dog = Dog()
dog.speak()
ワンワン!
このように、子クラスで同じ名前のメソッドを定義すれば、親のメソッドは無視されて、新しい動作になります。
5. 親クラスの機能を使いながら追加・変更する方法
子クラスで親クラスの機能を一部だけ使いたい場合は、super()を使います。これにより、親のメソッドを呼び出すことができます。
class Dog(Animal):
def speak(self):
super().speak()
print("…でも実はワンワンって鳴くよ!")
dog = Dog()
dog.speak()
何かの動物が鳴いています。
…でも実はワンワンって鳴くよ!
super()を使うことで、親クラスの機能も生かしつつ、追加の処理ができます。
6. 継承のメリットと使いどころ
Pythonで継承を使うと、コードがすっきりして再利用性が高まります。次のような場面で活躍します。
- 共通する機能をまとめておきたいとき
- 似たようなクラスをたくさん作りたいとき
- 機能の一部だけを変更して使いたいとき
たとえば、ゲームの中で「キャラクター」というクラスを作り、それを「戦士」や「魔法使い」などが継承すれば、共通する動きは親に、個別の技は子に書けます。
7. 実生活の例でイメージしよう:家電とスマート家電
「家電」を親クラスとすると、「スマート家電」は子クラスになります。
- 親クラス:電源オン・オフ機能
- 子クラス:Wi-Fi接続、スマホ操作など追加の機能
親クラスの基本機能を受け継ぎつつ、子クラスで便利な機能を追加できます。これがPythonにおける継承とオーバーライドの関係です。
8. 継承とオブジェクト指向の考え方を理解しよう
Pythonのオブジェクト指向プログラミングでは、継承はとても重要な考え方です。小さなパーツを組み合わせて、大きな仕組みを作るのに最適です。
継承を使うと、共通のコードを親に集約し、個別の機能は子で定義できるので、保守性も高まります。初心者のうちは難しく感じるかもしれませんが、考え方をしっかりつかめば、Pythonで効率的な開発ができるようになります。