継承: コードの再利用
親クラスの機能を引き継いで拡張。DRY原則の実現。
継承
親クラスの機能を引き継ぐ。
super()
親クラスのメソッドを呼び出す。
Mixin
再利用可能な機能を追加するパターン。
継承とは?
「共通部分は親にまとめ、違いだけを子に書く」のがポイントです。これによりコードの重複を劇的に減らせます(DRY原則)。子クラスで親の機能を上書き(オーバーライド)することで、独自の振る舞いを追加することも可能です。
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): passclass Cat(Animal): pass高度な継承
# 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: メソッドオーバーライド
親クラスのメソッドをオーバーライドしてください。