Понимание аннотаций типов в Python
@python_quizРазберем этот квиз
Условие (код из квиза)

Код выглядит так, будто переменная x должна содержать только целые числа. Давайте разберёмся, что здесь реально происходит и почему.
Что делает Python с аннотациями типов
- Начиная с PEP 526 (Python 3.6) появилась возможность аннотировать переменные:
x: List[int] = []. - Аннотации — это подсказки (type hints). Интерпретатор Python не будет автоматически проверять соответствие значения указанной аннотации.
- Аннотации сохраняются в специальном словаре модуля
__annotations__и используются статическими инструментами (mypy, pyright), IDE и документацией.
Выполнение примера — результат
Если запустить код, он выполнится и напечатает список с строкой:

Ожидаемый вывод:

То есть добавление строки в список разрешено, ошибок во время выполнения не возникает.
Почему не возникает ошибки во время выполнения
- Метод list.append не делает никаких проверок типов — он просто добавляет объект в список.
- Аннотация
List[int]не интерпретируется как правило исполнения; это лишь метаданные. - Если нужна статическая проверка, используются инструменты вроде mypy:
Пример использования mypy (команда в терминале):

mypy выявит несоответствие между объявлением и фактическим типом добавленного значения.
Где можно получить проверку типов в рантайме
Если вам важно проверять типы во время выполнения, есть несколько подходов:
- Использовать библиотеку typeguard:

- Явно проверять значения с помощью isinstance:

- Использовать runtime-валидацию в моделях (pydantic, attrs с валидацией и т.п.).
Разбор возможных заблуждений (варианты из квиза)
- "Код выполнится без ошибок, type hints не влияют на рантайм" — соответствует реальному поведению интерпретатора: аннотации не приводят к ошибке.
- "Будет
TypeErrorпри выполнении append" — неверно для чистого Python: list.append не проверяет типы. - "Интерпретатор остановит программу из-за несоответствия аннотации" — неверно: интерпретатор не останавливает программу из-за аннотаций.
- "Будет
SyntaxErrorиз-за неверной аннотации" — неверно: аннотация синтаксически корректна (в версиях Python, поддерживающих PEP 526).
Дополнительные замечания
- Если используется
from __future__ import annotations, аннотации хранятся в виде строк (отложённая оценка), но это никак не меняет отсутствие автоматической проверки типов. - Статический анализ и типизация помогают предотвращать ошибки и повышают читаемость кода, но для защит в рантайме нужно добавлять отдельную проверку.
Итог
Аннотации в Python — это мощный инструмент для документирования и статического анализа, но сами по себе они не навязывают правил во время исполнения. Чтобы получить проверку типов в рантайме, используйте сторонние библиотеки или явные проверки.