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