'fluent Python" 5장을 정리한 내용 입니다.
data class : 파이썬에서 간단항 방식으로 dataclass를 구성하기위해 제공하는 패키지
3가지 대표적인 data class builder
class Coordinate:
def __init__:(self, lat, lon):
self.lat = lat
self.lon = lon
# namedtuple
from collections import namedtuple
Coordinate = namedtuple('Coordinate', 'lat lon')
-> datatype -> tuple
# typing
import typing
Coordinate = typing.NamedTuple('Coordinate', ['lat',float], ['lon',float])
#Coordinate = typing.NmaedTuple('Coordinate', lat=float, lon=float)
# data type -> tuple
#dataclass
#supper class나 metaclass를 상속받지 않고 이용
@dataclass(forzen = True)
class Coordinate:
lat: float
lon: float
def __str__(self):
ns = 'N' if self.lat >=0 else 'S'
we = 'E' if self.lon >=0 else 'W'
return f'{abs(self.lat):.lf}{ns}'
Main Features
- mutable instance
@dataclass와 typing.NamedTuple 은 __annotatons__
attibute를 이용하여 type hints를 접근 할 수 있지만, 바로 접근하는 방식은 추천되지 않으며 파이썬 버전에 따라 inspect.get_annotions(myclass), typing.get_type_hints(mylcass)로 접근하는 것이 좋음
collections.namedtuple은 tuple의 subclass로서 field name, class name, __repre__
가 포함된 향상된 tuple
tuple이 필요한 곳에 항상 사용 가능, Python standar library서 tuple을 반환하는 함수라면, 자동으로 이용 가능하도록 되어있음
class이름, 필드이름의 list를 인자로 namedtuple 생성시 이용
( iterable한 string, single space delimited string 이용 )
tuple을 상속받기 때문에 다양한 methods를 같이 이용 가능
( __eq__
, __lt__
for comparison oeprator )
__annotation__
attribute만 다르다__init__
__repr__
__hash__
를 생성, 객체가 hashable해지는 특징을 가짐