Какие существуют инструменты для статической проверки типов в Python?

Ответ

Для статической проверки типов в Python (type checking) используются специализированные анализаторы кода. Они помогают находить ошибки, связанные с типами, до запуска программы.

Основные инструменты:

  1. Mypy — де-факто стандарт для статической типизации в Python. Он наиболее популярен и имеет широкую поддержку.

    # Установка
    pip install mypy
    
    # Запуск проверки
    mypy your_script.py
  2. Pyright — разработан Microsoft, известен своей высокой скоростью. Является основой для языкового сервера Pylance в VS Code, обеспечивая проверку типов «на лету».

    # Установка
    pip install pyright
    
    # Запуск проверки
    pyright your_script.py
  3. Pyre — разработан Meta (Facebook), ориентирован на производительность и масштабируемость в больших проектах.

    # Установка
    pip install pyre-check
    
    # Инициализация и запуск
    pyre init
    pyre check

Важное различие:

  • Статическая проверка (Mypy, Pyright) анализирует исходный код без его выполнения.
  • Валидация в рантайме (например, с помощью Pydantic) проверяет типы данных во время выполнения программы, что критически важно для обработки внешних данных (например, из API-запросов).

Модуль typing сам по себе не выполняет проверок, а лишь предоставляет синтаксис для аннотаций типов, который затем используют анализаторы.

Ответ 18+ 🔞

А, ну это про то, как заставить питон не быть таким распиздяем с типами! Слушай, история простая, но пиздец важная.

Вот пишешь ты код, а питон — он же добрый, он тебе всё прощает, как бабушка. Напишешь x = "строка", а потом x + 5 — он тебе на этапе запуска такой: "Ой, внучек, TypeError тебе в лоб, на, получай!" И программа — накрылась медным тазом. Сука, обидно.

Чтобы такого не было, придумали статическую проверку типов. Это как надзиратель, который смотрит на твой код, не запуская его, и орёт: "Э, бошка думай! Ты тут строку с числом складываешь, пидарас шерстяной!". И ты заранее всё исправляешь.

Главные палачи на этой каторге:

  1. Mypy — это, блядь, классика жанра. Все его знают, все его юзают. Де-факто царь и бог.

    # Ставится проще простого
    pip install mypy
    # А потом ты ему файл суёшь, и он начинает тебя ебать
    mypy твой_скрипт.py
  2. Pyright — это штука от Microsoft, быстрая как хуй с горы. Встроена в VS Code (в плагин Pylance) и орёт на тебя прямо в редакторе, красными подчёркиваниями. Удобно, ёпта.

    pip install pyright
    pyright твой_скрипт.py
  3. Pyre — это уже тяжёлая артиллерия от ребят из Meta (бывший Facebook). Заточена под огромные проекты, где код — как говна в сортире после праздника.

    pip install pyre-check
    pyre init  # Она там себе настроечки создаст
    pyre check # И пошла проверять

Вот тут, блядь, важный момент, чтобы не обосраться:

  • Статическая проверка (Mypy, Pyright) — это превентивный удар. Код не запускается, она просто читает твои аннотации и мозолит глаза.
  • Валидация в рантайме — это когда программа уже бежит, и ты, например, данные от пользователя получил. Тут тебе не Mypy поможет, а Pydantic, например. Он в момент выполнения схватит кривые данные и скажет: "Нет, мудила, я ждал число, а ты мне строку прислал!". Без этого — пипец, уязвимости и прочая хуйня.

И запомни раз и нахуй: модуль typing — это не волшебник. Это просто набор слов, чтобы аннотации писать. Сам по себе он нихуя не проверяет. Он как кисточка, а Mypy — это уже художник, который смотрит, криво ты этой кисточкой мазнул или нет.

Вот и вся магия. Пиши типы, запускай mypy, исправляй ошибки до того, как они тебя найдут в проде. И будет тебе счастье, а не "вротберунчик" в три часа ночи.