見出し画像

Pyhon -継承-

継承は、既存のクラス(親クラスまたはスーパークラス)を基に、新しいクラス(子クラスまたはサブクラス)を作成する仕組み


継承のメリット

  • コードの再利用: 親クラスの機能をそのまま利用できるため、重複するコードを減らすことができる

  • メンテナンスの容易さ: 共通の機能を親クラスに集約できるため、変更や修正が容易になる

例: 継承の使用

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return f"{self.name} makes a sound."

# DogクラスはAnimalクラスを継承
class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

# CatクラスもAnimalクラスを継承
class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.speak())  
# 出力: Buddy says Woof!

print(cat.speak())  
# 出力: Whiskers says Meow!

DogとCatクラスは、Animalクラスを継承している
これにより、name属性や__init__メソッドなどを共通化し、個別のDogやCatクラスに特有のbarkやmeowといった動作を追加している

2. ポリモーフィズム (Polymorphism)

ポリモーフィズムは、「多様な形を持つ」という意味で異なるクラスのオブジェクトが同じインターフェース(メソッドや操作)を共有し、異なる方法でそれを実装できる仕組み

ポリモーフィズムのメリット

  • 柔軟性: 同じメソッドを異なるオブジェクトに対して呼び出すことができ、そのオブジェクトに応じた適切な動作が実行される

  • 拡張性: 新しいクラスを追加する際に、既存のコードを変更せずに新しい動作を追加できる

例: ポリモーフィズムの使用

class Animal:
    def speak(self):
        return "Animal sound"

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

# 共通のインターフェースを持つ異なるクラスのオブジェクト
animals = [Dog(), Cat(), Animal()]

# ポリモーフィズムによって、各オブジェクトが適切なspeakメソッドを実行
for animal in animals:
    print(animal.speak())

この例では、animalsリストに異なるクラスのオブジェクトを格納し、speakメソッドを呼び出している。それぞれのオブジェクトは、自身のクラスに応じた適切なspreakメソッドを実行する

3. 継承とポリモーフィズムの関係

継承とポリモーフィズムは密接に関連している。継承を利用することで、共通のインターフェースを持つクラスの階層を作り、ポリモーフィズムによってその階層内のオブジェクトが同じインターフェースを使って異なる振る舞いを実現でき

例: 継承とポリモーフィズムの組み合わせ

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclasses must implement this method")

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

# 異なるサブクラスのオブジェクトを同じインターフェースで扱う
animals = [Dog("Buddy"), Cat("Whiskers")]

for animal in animals:
    print(animal.speak())

この例では、Animalクラスを基にDogとCatクラスが作られている。これらのクラスは、それぞれ異なるspreakメソッドを持っていますが、同じAnimal型のインターフェースで扱うことができる


この記事が気に入ったらサポートをしてみませんか?