Используются ли аннотации типов в Python?
Что проверяют
Понимаете ли вы, что типизация динамическая и строгая, и знаете ли, что аннотации не проверяются во время выполнения.
Как отвечать
Python динамически типизирован: тип связан со значением, а не с переменной, и проверяется в момент операции. Одна и та же переменная может ссылаться на объекты разных типов.
При этом типизация строгая: неявных преобразований между несовместимыми типами нет. "1" + 1 это ошибка, а не «11», в отличие от JavaScript.
С версии 3.5 есть аннотации типов:
def total(items: list[Item], discount: float = 0.0) -> Decimal: ...Ключевое: интерпретатор их не проверяет. Они хранятся в __annotations__ и нужны инструментам. Проверку делают mypy, pyright или встроенная в редактор. Поэтому аннотации это документация плюс статический анализ, а не гарантия времени выполнения.
Что стоит назвать дальше: Optional и объединения через |, обобщения (list[str]), TypedDict для словарей известной формы, Protocol для утиной типизации по интерфейсу, Literal, Final, TypeVar, Self.
И про валидацию на границе: данные из запроса, JSON.parse и переменные окружения аннотацией не проверяются. Для этого берут Pydantic, который использует те же аннотации, но проверяет их во время выполнения.
Где спотыкаются
Считают, что аннотации проверяются интерпретатором.
Путают динамическую и слабую типизацию.
Не запускают статический анализатор, из-за чего аннотации расходятся с кодом.
Ставят Any вместо разбора сложного случая, обнуляя пользу.