Python Glossary English

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Сообщить о неточности