Сообщить об ошибке.

Тип аннотации NamedTuple модуля typing в Python.

Типизация именованных кортежей.

Не используется в аннотациях, являются строительным блоком для объявления типов.

Синтаксис:

from typing import NamedTuple

NamedTuple

Описание:

Тип аннотации NamedTuple() модуля typing представляет собой типизированную версию класса именованного кортежа collections.namedtuple().

Использование:

class Employee(NamedTuple):
    name: str
    id: int

# Это эквивалентно:

Employee = collections.namedtuple('Employee', ['name', 'id'])

Чтобы присвоить полю значение по умолчанию, его можно присвоить в теле класса:

class Employee(NamedTuple):
    name: str
    id: int = 3

employee = Employee('Guido')
assert employee.id == 3

Поля со значением по умолчанию должны располагаться после любых полей без значения по умолчанию

Результирующий класс имеет дополнительный атрибут __annotations__, который сопоставляет имена полей с типами полей. Имена полей находятся в атрибуте _fields, а значения по умолчанию - в атрибуте _field_defaults, оба из которых являются частью API collections.namedtuple().

Подклассы NamedTuple также могут иметь строки документации и методы:

class Employee(NamedTuple):
    """Представление сотрудника."""
    name: str
    id: int = 3

    def __repr__(self) -> str:
        return f'<Employee {self.name}, id={self.id}>'

Использование с обратной совместимостью

Employee = NamedTuple('Employee', [('name', str), ('id', int)])

Изменено в Python 3.8: атрибуты _field_types и __annotations__ теперь являются обычными словарями, а не экземплярами OrderedDict.

Изменено в Python 3.9: удален атрибут _field_types в пользу более стандартного атрибута __annotations__, который имеет ту же информацию.