Python:dataclasses
이 모듈은 init() 나 repr() 과 같은 생성된 특수 메서드를 사용자 정의 클래스에 자동으로 추가하는 데코레이터와 함수를 제공합니다. 원래 PEP 557 에 설명되어 있습니다.
How to use
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
dataclass
Base
를 상속받은 C
는 다음의 생성자가 만들어진다.
필드 커스텀
초기화 인자, __repr__
포함 여부 등 특성 제어를 위해 field
함수를 사용하면 된다.
# -*- coding: utf-8 -*-
from typing import Optional, Any, List
from datetime import datetime
from dataclasses import dataclass, field
@dataclass
class Project:
uid: Optional[int] = None
group_uid: Optional[int] = None
slug: Optional[str] = None
name: Optional[str] = None
description: Optional[str] = None
features: Optional[List[str]] = None
extra: Optional[Any] = None
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
_group_slug: Optional[str] = field(default=None, init=False, repr=False)
def remove_sensitive(self) -> None:
self.uid = None
self.group_uid = None
@property
def group_slug(self) -> Optional[str]:
return self._group_slug
@group_slug.setter
def group_slug(self, value: Optional[str]):
self._group_slug = value
default_factory
제공되면, 이 필드의 기본값이 필요할 때 호출되는 인자가 없는 콜러블이어야 합니다.
여러 용도 중에서도, 이것은 아래에서 논의되는 것처럼 가변 기본값을 가진 필드를 지정하는 데 사용될 수 있습니다.
default 와 default_factory 를 모두 지정하는 것은 에러입니다.