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

Аннотации Required и NotRequired модуля typing в Python

Обязательные/необязательные элементы для typing.TypedDict

Аннотации 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.