採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

L07 ch01 — dataclass

テクノロジ系 / L07 class — クラスとデータ構造

L07 ch01 — dataclass

データ保持専用クラスを最小コードで定義する

ゴール

  • @dataclass でデータクラスを定義
  • 型ヒント駆動の値オブジェクト
  • frozen=True で immutable に

通常のクラス (冗長)

class Task:
    def __init__(self, id: int, title: str, done: bool = False):
        self.id = id
        self.title = title
        self.done = done

    def __repr__(self):
        return f"Task(id={self.id}, title={self.title!r})"

@dataclass で簡潔に

from dataclasses import dataclass

@dataclass
class Task:
    id: int
    title: str
    done: bool = False

t = Task(id=1, title="買い物")
print(t)  # Task(id=1, title='買い物', done=False)

__init__ / __repr__ / __eq__ を自動生成。

frozen で immutable

@dataclass(frozen=True)
class Task:
    id: int
    title: str

t = Task(id=1, title="掃除")
t.title = "変更"  # → FrozenInstanceError

→ Value Object 設計に最適

mutable default の罠

# ❌ 危険
@dataclass
class Cart:
    items: list = []   # → エラー (PEP)

# ✅ 正しい
from dataclasses import field
@dataclass
class Cart:
    items: list = field(default_factory=list)

比較も自動

t1 = Task(id=1, title="a")
t2 = Task(id=1, title="a")
t1 == t2  # True (自動 __eq__)

通常クラスならインスタンス比較で False。

dataclass の用途

  • DTO (Data Transfer Object)
  • API レスポンスの構造化
  • 設定オブジェクト
  • イベント / ドメインモデル

業務で大量に使う

drill

drill/ — Task dataclass の定義

力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。