Python 3.5+Аннотации и typingпонятие
typing.NamedTuple
namedtuple
Типизированный именованный кортеж через наследование. Синтаксис класса с аннотациями.
Синтаксис
from typing import NamedTuple
class MyTuple(NamedTuple):
field: type
Берите NamedTuple, когда нужна неизменяемая хешируемая запись, которая ведёт себя как кортеж: распаковка, индексация, использование ключом словаря, экономия памяти. Если поля должны меняться или планируется наследование и своя логика — это работа для dataclass. Ловушка ровно в том, что это настоящий кортеж: Point(1.0, 2.0) == (1.0, 2.0) даёт True, так что тип не спасёт от случайного смешивания с обычными кортежами. Функциональная форма NamedTuple('NT', x=int) с именованными аргументами и вызов без списка полей устарели в 3.13 и запрещены с 3.15: пишите класс, как в примере, или NamedTuple('NT', [('x', int)]).
Примеры
from typing import NamedTuple
class Point(NamedTuple):
x: float
y: float
label: str = ''
p = Point(1.0, 2.0, 'A')
print(p.x) # → 1.0
print(p.label) # → A
print(p._asdict()) # → {'x': 1.0, 'y': 2.0, 'label': 'A'}
print(p._replace(x=5.0)) # → Point(x=5.0, y=2.0, label='A')
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности