728x90
파이썬 3.7부터 도입된 dataclasses
는 클래스 정의를 간소화하고 자동으로 생성자, 비교 함수, 출력 함수 등을 만들어주는 데코레이터입니다. 이 장에서는 @dataclass
의 다양한 기능과 필드 제어 방법을 살펴봅니다.
● 기본 사용법
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
p = Person("Alice", 30)
print(p) # Person(name='Alice', age=30)
생성자, __repr__, __eq__ 등 반복되는 메서드들이 자동으로 생성됩니다.
● 기본값과 필드 순서
@dataclass
class Product:
name: str
price: int = 0
기본값이 있는 필드는 반드시 기본값이 없는 필드 뒤에 위치해야 합니다.
● 필드 제어 (field 함수)
field()
를 사용하면 디폴트값, 초기화 여부, 비교 여부 등을 상세 제어할 수 있습니다.
from dataclasses import field
@dataclass
class Item:
name: str
count: int = field(default=0, init=True, repr=True, compare=True)
● 초기화 제외 필드 (init=False)
@dataclass
class Log:
message: str
timestamp: float = field(init=False)
def __post_init__(self):
from time import time
self.timestamp = time()
__post_init__()
는 생성자 이후에 자동 실행되어 필드 초기화에 사용됩니다.
● frozen=True로 불변 클래스 만들기
@dataclass(frozen=True)
class Config:
host: str
port: int
frozen을 True로 설정하면 생성 이후 값을 변경할 수 없는 불변 객체가 됩니다.
● 마무리
dataclass는 간결하고 명확한 데이터 중심 클래스 정의를 가능하게 합니다. field()
, __post_init__()
, frozen
등의 기능을 통해 객체의 생성과 제약을 정교하게 설계할 수 있습니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter48. typing 모듈로 타입 지정 고도화 (0) | 2025.05.25 |
---|---|
[파이썬][중급] Chapter47. enum 클래스와 열거형 처리 (0) | 2025.05.25 |
[파이썬][중급] Chapter45. CSV 파일과 pandas의 통합 활용 (0) | 2025.05.24 |
[파이썬][중급] Chapter44. JSON과 pickle의 차이점 (0) | 2025.05.24 |
[파이썬][중급] Chapter43. pickle을 활용한 객체 직렬화 (0) | 2025.05.24 |