継承: コードの再利用

親クラスの機能を引き継いで拡張。DRY原則の実現。

継承
親クラスの機能を引き継ぐ。
super()
親クラスのメソッドを呼び出す。
Mixin
再利用可能な機能を追加するパターン。

継承とは?

家族の遺伝子 (Family DNA)

継承は「親のDNA(機能)を子が受け継ぐ」仕組みです。「動物(Animal)」という親クラスが「食べる・寝る」という機能を持っていれば、その子クラスである「犬(Dog)」や「猫(Cat)」は、自分でコードを書かなくても生まれつき「食べる・寝る」ことができます。

「共通部分は親にまとめ、違いだけを子に書く」のがポイントです。これによりコードの重複を劇的に減らせます(DRY原則)。子クラスで親の機能を上書き(オーバーライド)することで、独自の振る舞いを追加することも可能です。

Basic Inheritance
class Animal:
def __init__(self, name: str):
self.name = name
def speak(self) -> str:
raise NotImplementedError
class Dog(Animal):
def speak(self) -> str:
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self) -> str:
return f"{self.name} says Meow!"
dog = Dog("Rex")
print(dog.speak()) # Rex says Woof!
Bad
# ❌ Bad: コードの重複
class Dog:
def __init__(self, name): self.name = name
def eat(self): print(f"{self.name} is eating")
class Cat:
def __init__(self, name): self.name = name
def eat(self): print(f"{self.name} is eating")
Good
# ✅ Good: 共通部分を継承
class Animal:
def __init__(self, name): self.name = name
def eat(self): print(f"{self.name} is eating")
class Dog(Animal): pass
class Cat(Animal): pass

高度な継承

super() & Mixin
# super() で親メソッド呼び出し
class Animal:
def __init__(self, name):
self.name = name
class Pet(Animal):
def __init__(self, name, owner):
super().__init__(name) # 親の __init__ を呼ぶ
self.owner = owner
# 多重継承(Mixin パターン)
class JSONMixin:
def to_json(self):
import json
return json.dumps(self.__dict__)
class User(Animal, JSONMixin):
pass
user = User("Alice")
print(user.to_json()) # {"name": "Alice"}
Tip: 多重継承よりもコンポジション(has-a)を優先する。

合格ライン

super() を使える
メソッドのオーバーライドができる

演習課題

課題1: super()
super() で親クラスのメソッドを呼び出してください。
課題2: メソッドオーバーライド
親クラスのメソッドをオーバーライドしてください。