dataclasses — 데이터 클래스
dataclasses — 데이터 클래스
이 모듈은 사용자 정의 클래스에 __init__()과 __repr__() 같은 생성된 특별 메서드를 자동으로 추가하는 데코레이터와 함수를 제공합니다. 원래 PEP 557에서 처음 기술되었습니다. 이렇게 생성된 메서드에 사용할 멤버 변수들은 PEP 526 타입 애너테이션으로 정의됩니다.
본문
예를 들어, 다음 코드:
from dataclasses import dataclass
@dataclass
class InventoryItem:
"""Class for keeping track of an item in inventory."""
name: str
unit_price: float
quantity_on_hand: int = 0
def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand
는 그중에서도 다음처럼 생긴 __init__()을 추가합니다:
def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
self.name = name
self.unit_price = unit_price
self.quantity_on_hand = quantity_on_hand
이 메서드는 자동으로 클래스에 추가되며, 위 InventoryItem 정의에 직접 지정된 것이 아닙니다. dataclasses는 Python 3.7에서 추가되었습니다.
모듈 내용
@dataclasses.dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False) 데코레이터는 아래에서 설명하듯 생성된 특별 메서드를 클래스에 추가하는 데 사용됩니다.
@dataclass 데코레이터는 클래스를 검사하여 field를 찾습니다. field는 타입 애너테이션을 가진 클래스 변수로 정의됩니다. 아래 설명할 두 가지 예외를 제외하고, @dataclass는 변수 애너테이션에 지정된 타입을 검사하지 않습니다. 생성된 모든 메서드에서 필드의 순서는 클래스 정의에 나타나는 순서와 같습니다.
@dataclass 데코레이터는 클래스에 다양한 "dunder" 메서드를 추가합니다. 추가된 메서드가 클래스에 이미 존재하면 동작은 해당 매개변수에 따라 달라집니다. 데코레이터는 호출된 동일한 클래스를 반환하며, 새 클래스를 만들지 않습니다.
@dataclass를 매개변수 없이 단순한 데코레이터로 사용하면 이 시그니처에 문서화된 기본값을 가진 것처럼 동작합니다. 즉, 다음 세 사용은 동등합니다:
@dataclass
class C:
...
@dataclass()
class C:
...
@dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False,
match_args=True, kw_only=False, slots=False, weakref_slot=False)
class C:
...
@dataclass의 매개변수:
init— true(기본값)이면__init__()메서드가 생성됩니다. 클래스가 이미__init__()을 정의하면 이 매개변수는 무시됩니다.repr— true(기본값)이면__repr__()메서드가 생성됩니다. 생성된 repr 문자열은 클래스 이름과 클래스에 정의된 순서대로 각 필드의 이름과 repr을 갖습니다. repr에서 제외된 표시된 필드는 포함되지 않습니다.eq— true(기본값)이면__eq__()메서드가 생성됩니다.order— true이면__lt__(),__le__(),__gt__(),__ge__()메서드가 생성됩니다.unsafe_hash— false(기본값)이면eq와frozen설정에 따라__hash__()가 생성됩니다.frozen— true이면 인스턴스에 할당하면 예외가 발생합니다.match_args,kw_only,slots,weakref_slot— 추가 동작을 제어합니다.