Python:强制类型提示[重复]

问题描述 投票:0回答:1

我想知道是否有办法在 Python 项目中强制执行类型提示

目前,我正在 .pre-commit-config.yaml 中使用

mypy 预提交钩子

- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v0.931
  hooks:
    - id: mypy

使用这个钩子,我将(正确地)无法提交以下代码,因为调用

add
函数时出现类型错误:

def add(a: int, b: int) -> int:
    return a + b

add(a=1.0, b=2.0)

但是,使用上面的mypy预提交钩子的组合,类型提示仍然没有完全执行,我将能够在不使用类型提示的情况下提交以下代码:

def add(a, b):
    return a + b

我也很好奇,如果在 Python 等动态类型语言中强制执行类型提示是一个好主意的话?我知道我可以为我的项目选择一些静态类型语言(例如 Java),但是,我想使用带有强制类型提示的 Python 的原因是因为这允许我依赖现有的 Python 库(例如 Tensorflow),同时确保由于函数签名中指定了类型,所以编写的代码质量更好。

python mypy python-typing pre-commit-hook
1个回答
12
投票

Mypy 公开了一系列选项,您可以设置这些选项来强制执行更严格或更宽松的类型检查,例如请参阅 mypy 配置文档。对于您的情况,可能是

disallow_untyped_defs, disallow_incomplete_defs, disallow_untyped_calls

您有多个选项来设置它们,例如使用 mypy.ini 文件,或者如果您想将所有内容保留在 pre-commit.yaml 中,您可以添加几个命令行参数。对于你的具体情况,看起来像

- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v0.931
  hooks:
    - id: mypy
      args: [--disallow-untyped-defs, --disallow-incomplete-defs, --disallow-untyped-calls]
© www.soinside.com 2019 - 2024. All rights reserved.