@dataclass: ボイラープレート削減
__init__, __repr__, __eq__ を自動生成。Python 3.7+の必須機能。
dataclass
データ保持クラスを簡潔に定義。
frozen
イミュータブル(変更不可)にする。
field
デフォルト値やファクトリを指定。
dataclassとは?
Python 3.7 で導入された、データ保持用のクラスを簡単に作るための機能です。ボイラープレート(決まりきったコード)を劇的に削減できるため、データの入れ物としてクラスを使う場合はほぼ必須の機能です。
from dataclasses import dataclass
@dataclassclass User: name: str age: int email: str = "" # デフォルト値
# 自動生成: __init__, __repr__, __eq__user = User("Alice", 30)print(user) # User(name='Alice', age=30, email='')
# 比較も自動user1 = User("Bob", 25)user2 = User("Bob", 25)print(user1 == user2) # TrueBad
# ❌ Bad: ボイラープレート多いclass User: def __init__(self, name, age, email=""): self.name = name self.age = age self.email = email
def __repr__(self): return f"User({self.name}, {self.age})"
def __eq__(self, other): return (self.name == other.name and self.age == other.age)Good
# ✅ Good: dataclass で簡潔from dataclasses import dataclass
@dataclassclass User: name: str age: int email: str = ""高度な機能
from dataclasses import dataclass, field
@dataclass(frozen=True) # イミュータブルclass Point: x: float y: float
@dataclassclass Order: id: int items: list = field(default_factory=list) # ミュータブルデフォルト
# 後処理 def __post_init__(self): if self.id < 0: raise ValueError("ID must be positive")
# slots で省メモリ (Python 3.10+)@dataclass(slots=True)class CompactUser: name: str age: int Tip: ミュータブルなデフォルト値は field(default_factory=list) を使う。
合格ライン
@dataclass を使える
frozen と field を知っている
演習課題
課題1: @dataclass
@dataclass でユーザークラスを作成してください。
課題2: frozen
frozen=True で不変なデータクラスを作成してください。