Статические анализаторы mypy и pyright

mypy это инструмент, который устанавливается отдельно как pip-пакет и запускается в проекте как часть тестов или CI/CD процесса. Перед сборкой и раскаткой приложения на сервер запускается проверка исходного Python-кода с mypy и если mypy находит ошибки, то процесс останавливается, разработчики исправляют найденные ошибки и процесс повторяется. Это приводит к тому, что до продакшн, то есть до рантайма и до живых пользователей соответственно ошибок долетает меньше, потому что многое выявляется на более ранних этапах.

В директории проекта создадим и активируем виртуальное окружение, установим в него mypy и запустим проверку нашего кода:

python3.10 -m venv env
. ./env/bin/activate
pip install mypy
mypy ./weather

Как видим, mypy не нашёл проблем в нашем коде. Внесём специально ошибку в код и убедимся, что mypy её найдёт:

Запуск mypy можно встроить в процесс CI/CD, чтобы процесс разворачивания приложения на серверах не запускался, если проверки mypy не прошли. Таким образом до runtime не смогут дойти ошибки, связанные с некорректным использованием типов данных, и это здорово — надёжность приложения значительно возрастает!

И ещё важно отметить, что используя mypy, вы можете проверять корректность своих тайп-хинтингов, которые вы указали. Пока учишься могут быть вопросы, правильно ли указан тип — вот можно указать тип у параметра функции, вызвать эту функцию с данными и посмотреть, как поведёт себя проверятор типов, встроенный в IDE, и как поведёт себя mypy.

Помимо mypy пользуется популярностью анализатор pyright. Они работают по-разному, например, такой код валиден с точки зрения mypy (и с точки зрения анализатора, встроенного в PyCharm IDE), но невалиден с точки зрения pyright:

class User:
    def __init__(self):
        self.name: str = "Petr"

    def yo(self):
        self.name = {}

Анализаторы кода продолжают развиваться и дорабатываться, они неидеальны, но проставлять подсказки типов — обязательное условие для серьёзных проектов. Анализаторы кода достаточно умны уже сейчас и станут ещё умнее в будущем.