<一覧に戻る

継承によるコードの再利用

継承は、オブジェクト指向プログラミングにおいて、既存のクラスの特性(属性やメソッド)を新しいクラスに引き継ぐ仕組みです。これにより、コードの再利用が可能になり、プログラムの保守性や可読性が向上します。このセクションでは、継承を使用してコードを再利用する方法について学びます。

継承の基本概念

継承を使うことで、親クラス(スーパークラス)の特性を子クラス(サブクラス)で利用できます。以下は、継承の基本的な構文です。

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 クラスを親クラスとして、CarBike のサブクラスを定義します。

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クラスは、車両の基本的な属性(車輪の数)を持ち、ドライブするためのメソッドを提供します。
  • CarBike はそれぞれ Vehicle クラスを継承し、特有のブランド名を持ちます。
  • 子クラスの __init__ メソッドでは、super() を使って親クラスのコンストラクタを呼び出し、車輪の数を設定しています。
  • drive メソッドもオーバーライドし、ブランド名を含めたメッセージを返します。

このように、親クラスの機能を再利用することで、コードの重複を避けつつ、特定の機能を持たせることができます。継承は、オブジェクト指向プログラミングの基本的な考え方の一つであり、効率的なコード作成に役立ちます。

出力結果: