5. Data Class Builders

ve.log·2022년 12월 4일
0

python

목록 보기
3/3

'fluent Python" 5장을 정리한 내용 입니다.

  • data class : 파이썬에서 간단항 방식으로 dataclass를 구성하기위해 제공하는 패키지

  • 3가지 대표적인 data class builder

  1. collections.namedtuple : 가장 간단한 방식
  2. typing.NamedTuple : type hints가 필드에 필요한 형태
  3. @dataclass.dataclass : classdecorator을 이용한 형태로 typing.NamedTuples보다는 커스터마이징 옵션이 다양

1. Overview of Data Class Builders

  • collections.namedtuple 이용
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
    • class statement syntax
    • construnct dict
    • get field name`
    • get default
    • get field types
    • get instance with changes
    • new class at runtime
  • @dataclass와 typing.NamedTuple 은 __annotatons__ attibute를 이용하여 type hints를 접근 할 수 있지만, 바로 접근하는 방식은 추천되지 않으며 파이썬 버전에 따라 inspect.get_annotions(myclass), typing.get_type_hints(mylcass)로 접근하는 것이 좋음

2. Classic Named Tuples

  • 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 )

3. Typed Nmaed Tuples

  • typing.NamedTuple은 어떠한 메소드도 갖고 있지 않으며, runtime시에 무시할 수 있는 __annotation__ attribute만 다르다

4. Type Hints 101

  • Type hints = type annotation
  • function arguments, return values, arributes를 명시하기에 좋은 방식
  • type hints는 python bytecode complier과 interpreter가 반드시 이용하도록 설계
  • No Runtime Efferct : type hints는 third party type checker가 이용하도록 되어있기 때문
  • Variable Annotation Syntax
  • the meaning of variable Annotations
  • Inspecting a typing.NamedTuple
  • Inspecting a class decorated with dataclass

5. More About @dataclass

  • dataclass는 keyword arguments를 받음
  • ex) @dataclass(*, init=True, repr=True, eq=True)
  • *, keyword-only
  • init True= getnerate __init__
  • repr = generate __repr__
  • frozen = True, class instance change를 보호
  • order = True, allows sorting of instance
  • eq, frozen arg들이 True라면 @dataclass 가 __hash__ 를 생성, 객체가 hashable해지는 특징을 가짐
profile
AI Engineer

0개의 댓글