Каково мнение о коренной статической типизации
Что проверяют
Есть ли у вас взвешенное мнение о типизации в Python и понимаете ли вы разницу между статической проверкой и тем, что происходит при выполнении. «Коренной» здесь обычно называют типизацию, встроенную в язык и проверяемую компилятором, как в Java или Go, в противовес аннотациям Python. Следом спрашивают, как вы вводили типы в существующий проект.
Как отвечать
Сначала разведите понятия. Python типизирован динамически и строго: тип есть у объекта, а не у переменной, и "1" + 1 падает с TypeError, неявного приведения нет. Статическая типизация означает проверку до запуска, и явное указание типов для неё не обязательно: Go, Kotlin, Rust выводят типы сами.
В самом интерпретаторе статической проверки нет, в Python постепенная (gradual) типизация:
- аннотации (PEP 484) интерпретатор не проверяет, и на скорость CPython они не влияют;
- проверку делают внешние инструменты, mypy и pyright, их запускают в CI, для нового кода часто с
--strict; - валидация на границах (JSON из API, конфиги) это отдельная задача, её решает pydantic во время выполнения;
- синтаксис стал легче:
int | Noneс 3.10, обобщенияdef first[T](xs: list[T]) -> Tи операторtypeс 3.12, а в 3.14 аннотации вычисляются отложенно.
Позицию аргументируйте условиями. Для сервиса, который живёт годы и который правят несколько человек, аннотации окупаются: рефакторинг безопаснее, IDE точнее, контракт функции виден без чтения тела. Вводить их стоит постепенно: публичные функции и новые модули, Protocol вместо жёстких базовых классов, Any только на границе с нетипизированным кодом. Для скрипта на сто строк или исследовательского ноутбука строгость не нужна.
Где спотыкаются
Путают статическую и строгую типизацию и называют Python слабо типизированным. Он динамический, но строгий.
Считают, что аннотации проверяются при запуске или ускоряют код. Без mypy или pyright функция с x: int спокойно примет строку.
Уходят в крайность: либо «типы в Python не нужны», либо сплошные Any и # type: ignore, которые дают видимость типизации без проверки. Сильнее звучит позиция с условиями: где типы окупаются и как вы их вводили.