Подсказка типа Python: Как обеспечить реализацию этого проекта в целом? - PullRequest
0 голосов
/ 02 мая 2019

Вся моя команда считает, что подсказки по типам в Python помогут нам создать код, который будет намного более удобен в обслуживании.Каждый на борту с внедрением подсказок типа для всего нашего проекта.

После использования mypy в течение недели мы поняли, что mypy на самом деле мало чем напоминает вам о реализации подсказок типа.Если вы забудете реализовать хинтинг типа, mypy не предупредит.В идеале мы хотим что-то похожее на flake8, которое может задерживать и предупреждать разработчиков, когда происходит нежелательное поведение.

Что делает ваша организация, чтобы заставить (насколько это возможно) намеки на шрифт в проектах Python?

Мы используем Visual Studio с расширением Python, если это имеет значение.

1 Ответ

1 голос
/ 03 мая 2019

Mypy поставляется с параметрами командной строки , которые позволяют вам настроить, насколько строго он проверяет тип вашего кода. Эти параметры командной строки также могут быть выражены в конфигурационном файле , из которого mypy будет автоматически считывать, если он присутствует.

Например, если вы хотите, чтобы mypy сообщала о предупреждении, если какая-то функция не имеет типов, вы должны использовать флаг командной строки --disallow-untyped-defs. В качестве альтернативы, используйте флаг --strict, который включает этот флаг вместе с несколькими другими полезными. (Запустите mypy --help, чтобы узнать, что включает --strict).

Чтобы гарантировать, что все в вашей организации проверяют код одинаково, я рекомендую передать файл конфигурации mypy.ini в репозиторий с настройками, которые вы хотите использовать. Например, вот файл конфигурации, который я использую, когда хочу, чтобы mypy проверил код в максимально возможной степени:

[mypy]
# Disallow dynamic typing
disallow_any_unimported = True
disallow_any_expr = True
disallow_any_decorated = True
disallow_any_generics = True
disallow_any_explicit = True
disallow_subclassing_any = True

# Disallow untyped definitions and calls
disallow_untyped_calls = True
disallow_untyped_defs = True
disallow_incomplete_defs = True
check_untyped_defs = True
disallow_untyped_decorators = True

# None and optional handling
no_implicit_optional = True

# Configuring warnings
warn_unused_ignores = True
warn_no_return = True
warn_return_any = True
warn_redundant_casts = True

# Misc things
strict_equality = True

# Config file
warn_unused_configs = True

Этот конфиг почти наверняка слишком агрессивен для реального производственного использования. В частности, вы, вероятно, захотите отключить некоторые параметры «отключить динамическую типизацию» как глобально, так и для отдельных модулей, особенно если вашей базе кода нужно широко использовать нетипизированные сторонние библиотеки.

Возможно, вы также захотите найти точный способ закрепления точной версии mypy, которую используют ваши разработчики - mypy docs рекомендует установить какой-нибудь скрипт runner для таких действий.

...