Общие ссылки
- Введение в аннотации типов Python
- Awesome Python Typing
- mypy documentation
- PEP 3107 -- Function Annotations
- PEP 484 -- Type Hints
- PEP 526 -- Syntax for Variable Annotations
- PEP 563 -- Postponed Evaluation of Annotations
чтобы не проверять типы в модулях в которых нет аннотации можно добавить напротив импорта модуля
import my_module # type: ignore
Автоматическая аннотация типов в legacy code
с помощью инструментов MonkeyType и pyannotate можно для начала аннотировать свой уже написанный код.
Правила для типизации (хорошая практика)
- избегать тип Any
- типизировать каждую функцию целиком
- не использовать cast
Конфигурация mypy
вдохновение было вот отсюда https://www.youtube.com/watch?v=kyVspqEcs-s
[mypy]
disallow_any_unimported = True
disallow_untyped_calls = True # запретить нетипизированные выводы
disallow_untyped_defs = True # запретить нетипизированные функции
disallow_incomlete_defs = True # запретить неполностью типизированные функции
warn_unused_configs = True
plugins = # плагины для mypy
mypy_django_plugin.main
mypy_drf_plugin.main
mypy_path = ./stubs
disallow_any_decorated = True # запрет чтобы декораторы были нетипизированы
warn_unreachable = True № предупреждение что код не будет выполнен
strict_equality = True # проверка на строгое равенство
implicit_reexport = False
allow_redefinition = True # позволяет переопределить переменную с произвольным типом в том # же блоке
warn_unused_ignore = True
[my-project.test.*] # игнорировать ошибки у конкретного модуля
ignore_erroros = True