プログラミングの学習を進めていくと、オブジェクト指向という言葉に出会います。その中でも特に重要な仕組みの一つが 継承(けいしょう) です。
継承とは、すでにあるクラスの特徴を引き継ぎながら、新しいクラスを作る仕組みのことを指します。簡単に言えば、「親の性質を受け継いだ子どもを作る」ようなイメージです。
これを使うと、同じようなコードを何度も書かなくても済むため、プログラムがすっきり整理され、拡張もしやすくなります。
継承には、初心者が理解しておくと便利なメリットがいくつかあります。
まず、コードの再利用性が高まります。親クラスに共通の機能を書いておけば、子クラスでそのまま利用できるので、無駄な重複を避けられます。
次に、拡張性の高さも大きな魅力です。親クラスを土台にして、新しい機能を持ったクラスを簡単に作成できるため、規模の大きなプログラムでも柔軟に対応できます。
さらに、整理されたコードを書けるようになります。関連するクラスを「親 → 子」の階層構造で整理できるので、どのクラスがどんな役割を持っているのかが分かりやすくなり、可読性が向上します。
Pythonで継承を使うと、既存のクラス(親クラス)の機能をそのまま引き継ぎ、新しい機能を追加できるようになります。
基本的な書き方はとてもシンプルです。
class 子クラス名(親クラス名):
# 子クラス独自の属性やメソッドを定義
子クラス名は、新しく作るクラスの名前を指定します。 親クラス名は、既存のクラスの名前です。括弧内に書きます。
これだけでは分からないと思うので、具体的なコードを見ていきましょう。
それでは、Pythonを使った継承の基本的な例を見てみましょう。ここでは「動物」という親クラスを用意し、それをもとに「犬」と「猫」のクラスを作っていきます。
# 親クラス: 動物
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("このメソッドはサブクラスで実装する必要があります。")
# 子クラス: 犬
class Dog(Animal):
def speak(self):
return f"{self.name}はワンワンと鳴きます。"
# 子クラス: 猫
class Cat(Animal):
def speak(self):
return f"{self.name}はニャーニャーと鳴きます。"
# インスタンスを作成
dog = Dog("ポチ")
cat = Cat("ミケ")
# メソッドを呼び出す
print(dog.speak()) # ポチはワンワンと鳴きます。
print(cat.speak()) # ミケはニャーニャーと鳴きます。
まず、Animal クラスは親クラスとして定義されています。
このクラスはすべての動物の基本となるクラスで、名前を持つという性質を共有しています。
また、speak というメソッドを持っていますが、ここでは「鳴き声の出し方は動物ごとに違う」という理由から、具体的な処理は書かず NotImplementedError を発生させています。 これは「子クラスで必ずこのメソッドを実装しなければならない」というサインのようなものです。
次に、Dog クラスと Cat クラスは Animal クラスを継承しています。
これにより、name という属性や、speak メソッドを「持っていること」が保証されます。
そして、それぞれのクラスでは speak メソッドを上書き(オーバーライド)して、自分に合った鳴き声を返すようにしています。犬なら「ワンワン」、猫なら「ニャーニャー」と鳴くわけですね。
最後に、Dog("ポチ")
や Cat("ミケ")
といった形でインスタンスを作り、それぞれの speak メソッドを呼び出すと、その動物に応じた鳴き声が表示されます。
継承は、オブジェクト指向プログラミングの中でも非常に重要な考え方です。
親クラスに共通の性質をまとめておき、子クラスがそれを引き継いで使ったり、必要に応じて独自の機能を追加したりできます。
これによって コードの再利用性が高まり、整理された読みやすいプログラム を書けるようになります。また、大規模なプログラムを作る際にも「拡張しやすい設計」を実現できるのです。
初心者のうちから「継承」の概念をしっかり理解しておくと、今後クラスを使ったプログラミングに取り組む際の強力な武器になります。