Python: аннотации типов и mypy
Коротко: Аннотации типов (type hints) записывают в код Python ожидаемые типы параметров, возвращаемых значений и переменных. Python их не навязывает, но инструменты вроде mypy и редакторы проверяют их.
Подробнее: Python остаётся динамически типизированным. Подсказки служат людям и инструментам: лучшее автодополнение, ранние сообщения об ошибках, более читаемые интерфейсы.
Подробности
- Основная форма:
def price(net: float, tax: float = 0.19) -> float:иname: str = "Anna". - Контейнеры:
list[int],dict[str, float],tuple[int, str],set[str](напрямую с Python 3.9, раньшеtyping.Listи т. д.). - Optional и объединение:
str | None(с 3.10) илиOptional[str]. Говорит: может бытьNone, поэтому проверяйте перед использованием. - Ещё:
Callable[ [int], str ]для функций,TypedDictдля словарей с фиксированными ключами,Protocolдля структурных интерфейсов («утиная типизация» с проверкой),Anyкак лазейка. - mypy:
mypy file.pyстатически проверяет подсказки и сообщает о противоречиях, например при передачеstrвместоint. Альтернативы: pyright (в Pylance), pytype. - Постепенно: Можно аннотировать отдельные файлы или функции. Неаннотированный код обрабатывается снисходительно.
- Во время выполнения: Библиотеки вроде Pydantic или FastAPI читают подсказки и проверяют входные данные.
- Предел: Подсказки ничего не гарантируют во время выполнения.
См. также: системы типов и вывод типов, линтеры, форматтеры и проверка типов