<一覧に戻る

ポリモーフィズム(多態性)の基本

ポリモーフィズム(多態性)は、異なるクラスのインスタンスが同じメソッドを持ち、異なる動作をすることを指します。これにより、同じインターフェースを通じて異なるオブジェクトを扱うことができ、コードの柔軟性と再利用性が向上します。

ポリモーフィズムの基本的な考え方

ポリモーフィズムは、次の2つの原則に基づいています:

  1. 同じメソッド名:異なるクラスが同じメソッド名を持つこと。
  2. 異なる実装:それぞれのクラスでメソッドが異なる動作をすること。

サンプルコード

以下に、ポリモーフィズムの基本的な例を示します。この例では、Animalという基底クラスと、DogおよびCatという派生クラスを作成します。それぞれのクラスは、speakというメソッドを持ち、異なる動作をします。

class Animal:
    def speak(self):
        raise NotImplementedError("このメソッドはサブクラスで実装する必要があります。")

class Dog(Animal):
    def speak(self):
        return "ワンワン"

class Cat(Animal):
    def speak(self):
        return "ニャー"

def animal_sound(animal):
    print(animal.speak())

# インスタンスを作成
dog = Dog()
cat = Cat()

# ポリモーフィズムを利用
animal_sound(dog)  # 出力: ワンワン
animal_sound(cat)  # 出力: ニャー

コードの解説

  1. Animalクラス: 基底クラスであり、speakメソッドはサブクラスで実装する必要があることを示すために、NotImplementedErrorを発生させています。

  2. DogクラスとCatクラス: Animalクラスを継承し、それぞれspeakメソッドをオーバーライドしています。Dogクラスでは「ワンワン」を、Catクラスでは「ニャー」を返します。

  3. animal_sound関数: 引数としてAnimalクラスのインスタンスを受け取り、speakメソッドを呼び出します。この関数は、どの動物が渡されてもその動物の鳴き声を出力します。

  4. インスタンスの生成と関数の呼び出し: DogCatのインスタンスを作成し、animal_sound関数を呼び出すことで、ポリモーフィズムが実現されています。

ポリモーフィズムの利点

  • コードの柔軟性: 異なるクラスでも同じインターフェースを持つため、同じ関数で様々なオブジェクトを扱うことができます。
  • 拡張性: 新しいクラスを追加する際に、既存のコードを変更することなく新しい動作を追加できます。
  • 保守性の向上: 共通のメソッド名を使用することで、コードがより整理され、保守が容易になります。

ポリモーフィズムを活用することで、プログラムの設計がより直感的かつ柔軟になります。今後の学習では、ポリモーフィズムを使った設計パターンや実践的なアプローチについても学んでいきましょう。

出力結果: