Python类型提示:如何在整个项目范围内实施?

时间:2019-05-02 00:18:56

标签: python mypy

我的整个团队都相信Python中的类型提示将帮助我们构建可维护性更高的代码。每个人都在整个项目中实施类型提示。

使用mypy一周后,我们意识到mypy并不能真正提醒您实现类型提示。如果您忘记实现类型提示,则mypy不会发出警告。理想情况下,我们需要类似于flake8的东西,只要出现不良行为,它们就可以掉毛并警告开发人员。

您的组织采取了什么措施来(尽可能)在python项目中强制类型提示?

如果需要的话,我们将Visual Studio与Python Extension一起使用。

1 个答案:

答案 0 :(得分:1)

Mypy随附command line options,可让您配置对代码进行类型检查的严格程度。这些命令行选项也可以用config file表示,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 recommend setting up some sort of runner script做这些事情。