typing.NamedTuple
이름 있는 튜플에 타입 힌트 추가하기
typing.NamedTuple은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
형식이 지정된 대안
typing.NamedTuple 기본 클래스는 이름 있는 튜플을 정의하는 현대적인 클래스 기반 방법입니다. 형식 힌트를 추가하고 일반 클래스처럼 작성하므로, 팩토리 형식보다 대부분의 편집기와 형식 검사기가 더 잘 이해합니다.
클래스 기반 구문
NamedTuple을 상속하고 각 필드를 형식 주석으로 선언합니다. 결과는 여전히 실제 튜플입니다.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p)동일한 튜플 동작
팩토리 버전의 모든 기능이 여전히 작동합니다. 이름으로 접근하기, 인덱스로 접근하기, 언패킹, 불변성이 모두 유지됩니다.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p.x, p[1])
x, y = p
print(x, y)인라인 기본값
클래스 본문에서 값을 할당하기만 하면 필드에 기본값을 지정할 수 있습니다. 기본값이 있는 필드는 기본값이 없는 필드 뒤에 와야 합니다.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
z: int = 0
print(Point(1, 2))
print(Point(1, 2, 9))메서드 추가
클래스이므로 실제 메서드를 추가할 수 있습니다. 이는 collections.namedtuple 팩토리로는 깔끔하게 처리하기 어려운 작업입니다.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
def distance_sq(self):
return self.x ** 2 + self.y ** 2
print(Point(3, 4).distance_sq())속성도 정의하기
필드에서 값을 계산하는 계산된 속성도 정의할 수 있습니다.
from typing import NamedTuple
class Rectangle(NamedTuple):
width: int
height: int
@property
def area(self):
return self.width * self.height
print(Rectangle(3, 4).area)도우미 메서드도 그대로 사용
익숙한 튜플 도우미도 여전히 사용할 수 있습니다. _replace(), _asdict(), _fields가 모두 같은 방식으로 작동합니다.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))형식 힌트로 의도 문서화
주석이 실행 시점에 강제되지는 않지만, 예상되는 형식을 문서화하고 mypy 같은 도구가 프로그램을 실행하기 전에 실수를 찾아내도록 합니다.
from typing import NamedTuple
class Employee(NamedTuple):
name: str
salary: float
active: bool = True
e = Employee('Alice', 5000.0)
print(e)NamedTuple과 데이터 클래스 비교
둘 중 선택하는 기준은 다음과 같습니다.
- NamedTuple: 불변이며 튜플과 비슷하고, 인덱싱과 언패킹을 지원합니다.
- 데이터 클래스: 기본적으로 변경 가능하며(또는 동결할 수 있으며), 인덱싱은 지원하지 않고 더 많은 구성 옵션을 제공합니다.
- 튜플 동작이 중요하면 NamedTuple을 선택하고, 더 풍부한 레코드가 필요하면 데이터 클래스를 선택합니다.
중첩과 구성
이름 있는 튜플은 서로 잘 구성됩니다. 한 필드가 또 다른 이름 있는 튜플이 되도록 하여 구조화된 불변 데이터를 만들 수 있습니다.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
class Line(NamedTuple):
start: Point
end: Point
line = Line(Point(0, 0), Point(3, 4))
print(line.end.y)함수 반환 형식으로 사용하기
함수가 NamedTuple을 반환하도록 주석을 달면 편집기가 결과의 필드 형식을 알 수 있습니다. 이 주석은 반환되는 레코드의 구조를 문서화합니다.
from typing import NamedTuple
class Stats(NamedTuple):
minimum: int
maximum: int
def analyze(nums) -> Stats:
return Stats(min(nums), max(nums))
r = analyze([5, 2, 8])
print(r.minimum, r.maximum)빠른 확인
collections.namedtuple 팩토리보다 typing.NamedTuple이 가지는 장점은 무엇인가요?
복습
이름 있는 튜플에 형식 힌트를 추가하는 방법을 배웠습니다.
- 주석이 달린 필드와 함께
typing.NamedTuple을 상속합니다. - 기본값을 인라인으로 설정하고 메서드와 속성을 추가합니다.
- 도우미
_replace,_asdict,_fields는 여전히 작동합니다. - 가독성과 도구 지원을 위해 팩토리보다 이를 우선적으로 사용합니다.
자주 묻는 질문
“typing.NamedTuple” 강의는 무료인가요?
네 — “typing.NamedTuple” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“typing.NamedTuple”에서 뭘 배우나요?
이름 있는 튜플에 타입 힌트 추가하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“typing.NamedTuple” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Enum 클래스
- IntEnum과 Flag
- NamedTuple 기초
- typing.NamedTuple