dataclasses — 데이터 클래스

dataclasses — 데이터 클래스

이 모듈은 사용자 정의 클래스에 __init__()__repr__() 같은 생성된 특별 메서드를 자동으로 추가하는 데코레이터와 함수를 제공합니다. 원래 PEP 557에서 처음 기술되었습니다. 이렇게 생성된 메서드에 사용할 멤버 변수들은 PEP 526 타입 애너테이션으로 정의됩니다.

출처: Python documentation

본문

예를 들어, 다음 코드:

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(기본값)이면 eqfrozen 설정에 따라 __hash__()가 생성됩니다.
  • frozen — true이면 인스턴스에 할당하면 예외가 발생합니다.
  • match_args, kw_only, slots, weakref_slot — 추가 동작을 제어합니다.

더 알아보기 (Learn more)