데이터 클래스 : 필드를 모아 놓은 간단한 클래스를 만드는 방법을 제공하는 패턴
collections.namedtupletyping.NamedTuple@dataclasses.dataclassnamedtuple : 사용자가 지정한 이름과 필드를 가진 tuple의 서브클래스를 만드는 팩토리 함수:namedtuple`과 같은 기능을 제공 + 각 필드의 자료형을 지정import typing
Coordinate = typing.NamedTuple('Coordinate', [('lat', 'float'), ('lon', 'float')])
print(issubclass(Coordinate, tuple)) # True
print(typing.get_type_hints(Coordinate)) # {'lat': <class 'float'>, 'lon': <class 'float'>}Coordinate = typing.NamedTuple('Coordinate', lat=float, lon=float)🤔 class문 안에서 NamedTuple이 슈퍼클래스처럼 보이지만 사실은 사용자 클래스를 생성하는 과정을 커스터마이즈하는 메타클래스의 고급 기능을 사용??
from typing import NamedTuple
class Coordinate(NamedTuple):
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):.1f}°{ns}, {abs(self.lon):.1f}°{we}'
슈퍼 클래스 : 다른 클래스가 상속받는 기본 클래스
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return f"{self.name}가 멍멍 짖습니다."
class Cat(Animal):
def speak(self):
return f"{self.name}가 야옹 웁니다."
위에선 Animal이 슈퍼 클래스, Dog과 Cat이 서브 클래스
collections.namedtuple: 필드명, 클래스명 및 보기 좋게 출력해주는__repr__()로 개선된 tuple 서브클래스를 만드는 팩토리
namedtuple로 만들어진 클래스는 튜플이 필요한 곳이면 어디든 사용 가능.