PYTHON · 객체지향
dataclass & 매직 메서드
@dataclass로 보일러플레이트를 제거하고, 매직 메서드로 연산자를 오버로드합니다.
객체지향중급dataclass__post_init__field매직메서드__add__
핵심 설명
@dataclass로 보일러플레이트를 제거하고, 매직 메서드로 연산자를 오버로드합니다.
Python code
from dataclasses import dataclass, field
from typing import List
@dataclass
class Point:
x: float
y: float
def distance(self) -> float:
return (self.x**2 + self.y**2) ** 0.5
# 연산자 오버로딩
def __add__(self, other: "Point") -> "Point":
return Point(self.x + other.x, self.y + other.y)
def __abs__(self) -> float:
return self.distance()
@dataclass(frozen=True) # immutable (hash 가능)
class Color:
r: int; g: int; b: int
def __post_init__(self):
for val in (self.r, self.g, self.b):
if not 0 <= val <= 255:
raise ValueError(f"RGB 값은 0-255: {val}")
@dataclass
class Team:
name: str
members: List[str] = field(default_factory=list)
def __len__(self): return len(self.members)
def __contains__(self, item): return item in self.members
def __iter__(self): return iter(self.members)
p1 = Point(3, 4)
p2 = Point(1, 2)
print(p1 + p2) # Point(x=4, y=6)
print(abs(p1)) # 5.0
team = Team("Dev", ["Alice", "Bob"])
print(len(team)) # 2
print("Alice" in team) # True
for member in team:
print(member)학습 팁
@dataclass(frozen=True)는 불변 객체를 만들고 __hash__를 자동 생성합니다. 딕셔너리 키나 세트 원소로 사용할 수 있습니다.
주의할 점
@dataclass에서 가변 기본값(list, dict)은 직접 쓸 수 없습니다. field(default_factory=list)를 사용하세요.
자주 묻는 질문
dataclass & 매직 메서드란 무엇인가요?
@dataclass 로 보일러플레이트를 제거하고, 매직 메서드로 연산자를 오버로드합니다.
dataclass & 매직 메서드 학습 시 주의할 점은 무엇인가요?
@dataclass 에서 가변 기본값(list, dict)은 직접 쓸 수 없습니다. field(default_factory=list) 를 사용하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.