Python Glossary English

Python 3.8+Аннотации и typingпонятие

typing.TypedDict

typeddict

Словарь с фиксированными типизированными ключами. Только для статического анализа; в рантайме — обычный dict.

Синтаксис

from typing import TypedDict
class MyDict(TypedDict):
    key: type

Главная ловушка: проверок в рантайме нет — лишний ключ, отсутствующий ключ или строка вместо float спокойно пройдут, ошибку покажет только mypy или другой статический анализатор. Это не класс: экземпляр создаётся как обычный литерал словаря, доступ идёт через p['x'], а не p.x, и isinstance с TypedDict не работает. Берите его для готовых dict-данных (JSON от API, конфиг), а если структуру вы создаёте сами — удобнее dataclass или NamedTuple с атрибутами. Функциональная форма без словаря полей — TypedDict('TD') или TypedDict('TD', None) — устарела в 3.13 и запрещена с 3.15: пустой тип пишется как TypedDict('TD', {}).

Примеры

from typing import TypedDict
class Point(TypedDict):
    x: float
    y: float
p: Point = {'x': 1.0, 'y': 2.0}
print(p['x'])  # → 1.0
print(p['y'])  # → 2.0
from typing import TypedDict
class User(TypedDict, total=False):
    name: str
    age: int
u: User = {'name': 'Alice'}  # → age необязателен
print(u)  # → {'name': 'Alice'}

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности