dataclass는 데이터 컨테이너 클래스를 보일러플레이트 없이 만드는 표준 방법입니다. 이 치트시트는 field(default_factory), frozen, slots 옵션과 흔한 함정을 정리합니다.
언제 이 치트시트를 보나?
- “데이터 담는 클래스”를 보일러플레이트 없이 만들고 싶을 때
- 기본값/불변성/비교 동작을 명확히 하고 싶을 때
핵심 패턴
- 가변 기본값은
default_factory로 - 불변 모델이 필요하면
frozen=True - 메모리/속성 오타 방지 목적이면
slots=True(버전/환경 고려)
최소 예제
1
2
3
4
5
6
| from dataclasses import dataclass, field
@dataclass
class User:
name: str
tags: list[str] = field(default_factory=list)
|
1
2
3
4
5
6
| from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
|
자주 하는 실수/주의점
tags: list[str] = [] 같은 기본값은 공유됨 → field(default_factory=list)frozen=True면 내부 가변 객체까지 자동으로 불변이 되진 않음(참조는 막지만 내부 변경은 가능할 수 있음)- 직렬화가 필요하면
asdict()/astuple()를 고려(중첩 구조는 재귀 변환됨)
관련 링크(공식 문서)