Аннотации typing.Required
и typing.NotRequired
(добавлено в Python 3.11) - это специальные конструкции ввода, которые помечают отдельные ключи TypedDict
как обязательные или необязательные соответственно.
Другими словами, эти аннотации предоставляют простой способ отметить, должны ли присутствовать отдельные элементы в typing.TypedDict
. Ранее это было возможно только с использованием наследования.
Все поля по-прежнему являются обязательными по умолчанию, если только для параметра total
не установлено значение False
, и в этом случае все поля по-прежнему не являются обязательными по умолчанию.
Следующий пример указывает TypedDict
с одним обязательным и одним необязательным ключом:
class Movie(TypedDict): title: str year: NotRequired[int] # проверка типов -> OK m1: Movie = {"title": "Black Panther", "year": 2018} # проверка типов -> OK (год не требуется) m2: Movie = {"title": "Star Wars"} # проверка типов -> ERROR (отсутствует обязательный заголовок поля) m3: Movie = {"year": 2022}
Следующее определение эквивалентно:
class Movie(TypedDict, total=False): title: Required[str] year: int
Новое в Python 3.11.