我的整个团队相信 Python 中的类型提示将帮助我们构建更易于维护的代码。每个人都参与在我们整个项目中实施类型提示。
使用 mypy 一周后,我们意识到 mypy 并没有真正提醒您实现类型提示。如果您忘记实现类型提示,mypy 不会发出警告。理想情况下,我们想要类似于 flake8 的东西,可以在出现不良行为时检查并警告开发人员。
您的组织如何强制(尽可能多地)跨 Python 项目进行类型提示?
如果重要的话,我们使用带有 Python 扩展的 Visual Studio。
Mic*_*x2a 13
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
Run Code Online (Sandbox Code Playgroud)
对于实际生产使用来说,这个配置几乎肯定过于激进。特别是,您可能希望在全局或每个模块的基础上禁用一些“禁用动态类型”选项,特别是如果您的代码库需要广泛使用非类型化第三方库。
您可能还想找到某种方法来固定开发人员正在使用的 mypy 的确切版本 - mypy 文档建议设置某种运行程序脚本来执行此类操作。