継承は、オブジェクト指向プログラミングにおいて、既存のクラスの特性(属性やメソッド)を新しいクラスに引き継ぐ仕組みです。これにより、コードの再利用が可能になり、プログラムの保守性や可読性が向上します。このセクションでは、継承を使用してコードを再利用する方法について学びます。
継承を使うことで、親クラス(スーパークラス)の特性を子クラス(サブクラス)で利用できます。以下は、継承の基本的な構文です。
class 親クラス:
def メソッド(self):
pass
class 子クラス(親クラス):
def 子クラスメソッド(self):
pass
以下の例では、Animal
クラスを親クラスとし、Dog
クラスがそのサブクラスとして定義されています。
class Animal:
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self):
return "Woof!"
# インスタンスを作成
animal = Animal()
dog = Dog()
# メソッドの呼び出し
print(animal.speak()) # 出力: Some sound
print(dog.speak()) # 出力: Woof!
Animal
クラスには speak
メソッドがあります。これは、動物が発する音を表しています。Dog
クラスは Animal
クラスを継承し、speak
メソッドをオーバーライドしています。これにより、Dog
クラスのインスタンスは独自の音を返します。継承は、コードの再利用を促進する強力な手段です。共通の機能を親クラスに定義することで、子クラスでその機能を再利用できます。
次の例では、Vehicle
クラスを親クラスとして、Car
と Bike
のサブクラスを定義します。
class Vehicle:
def __init__(self, wheels):
self.wheels = wheels
def drive(self):
return f"Driving with {self.wheels} wheels"
class Car(Vehicle):
def __init__(self, brand):
super().__init__(4) # 車は4輪
self.brand = brand
def drive(self):
return f"{self.brand} car: " + super().drive()
class Bike(Vehicle):
def __init__(self, brand):
super().__init__(2) # バイクは2輪
self.brand = brand
def drive(self):
return f"{self.brand} bike: " + super().drive()
# インスタンスを作成
car = Car("Toyota")
bike = Bike("Yamaha")
# メソッドの呼び出し
print(car.drive()) # 出力: Toyota car: Driving with 4 wheels
print(bike.drive()) # 出力: Yamaha bike: Driving with 2 wheels
Vehicle
クラスは、車両の基本的な属性(車輪の数)を持ち、ドライブするためのメソッドを提供します。Car
と Bike
はそれぞれ Vehicle
クラスを継承し、特有のブランド名を持ちます。__init__
メソッドでは、super()
を使って親クラスのコンストラクタを呼び出し、車輪の数を設定しています。drive
メソッドもオーバーライドし、ブランド名を含めたメッセージを返します。このように、親クラスの機能を再利用することで、コードの重複を避けつつ、特定の機能を持たせることができます。継承は、オブジェクト指向プログラミングの基本的な考え方の一つであり、効率的なコード作成に役立ちます。