EMZETT.
Увійти

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 читають підказки й перевіряють вхідні дані.
  • Межа: Підказки нічого не гарантують під час виконання.

Див. також: системи типів і виведення типів, лінтери, форматувальники та перевірка типів