NamedTuple 클래스 구현하기
이 단계에서는 위치 인덱싱과 속성 이름을 모두 사용하여 데이터에 접근할 수 있는 NamedTuple 클래스를 구현하는 방법을 배우게 됩니다.
- 코드 편집기에서
namedtuple.py 파일을 엽니다.
tuple 클래스를 상속하는 NamedTuple 클래스를 정의합니다.
__init__ 메서드에서 두 개의 매개변수를 받습니다: iterable (데이터) 및 fields (데이터의 이름).
iterable과 fields를 각각 인스턴스 변수 self.data와 self.fields로 저장합니다.
for 루프를 사용하여 fields를 반복하고 각 필드를 NamedTuple 인스턴스의 속성으로 설정하여 self.data에서 해당 값을 할당합니다.
NamedTuple 클래스의 새 인스턴스를 생성하기 위해 __new__ 메서드를 구현합니다. 이 메서드는 tuple 클래스의 __new__ 메서드를 호출하고 새 인스턴스를 반환해야 합니다.
- 위치 인덱싱과 속성 이름을 모두 사용하여 데이터에 접근할 수 있도록
__getitem__ 메서드를 구현합니다. 인덱스가 문자열인 경우 self.fields에서 해당 필드의 인덱스를 찾고 self.data에서 값을 반환합니다.
NamedTuple 인스턴스를 NamedTuple(x=1, y=2) 형식으로 문자열 표현을 반환하기 위해 __repr__ 메서드를 구현합니다. 여기서 x와 y는 필드 이름이고 1과 2는 해당 값입니다.
완성된 NamedTuple 클래스는 다음과 같아야 합니다:
class NamedTuple(tuple):
def __init__(self, iterable, fields):
self.data = iterable
self.fields = tuple(fields)
for i, attr in enumerate(self.fields):
setattr(self, attr, self.data[i])
def __new__(cls, iterable, fields):
return super().__new__(cls, iterable)
def __getitem__(self, index):
if isinstance(index, str):
index = self.fields.index(index)
return self.data[index]
def __repr__(self):
return f"NamedTuple({', '.join(f'{field}={self[field]}' for field in self.fields)})"