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型のインターフェースで扱うことができる
この記事が気に入ったらサポートをしてみませんか?