Python:强制类型提示
Python: enforce type hinting
我想知道是否有办法在 Python 项目中强制实施 type hints?
目前,我在 .pre-commit-config.yaml
:
中使用 mypy pre-commit hook
- 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 and pre-commit hooks 组合,类型提示仍然没有完全执行,我将能够提交以下没有使用类型提示的代码:
def add(a, b):
return a + b
我也很好奇,如果在 Python 等动态类型语言中强制执行类型提示从一开始就是个好主意?我知道我可以为我的项目选择一些静态类型的语言(例如 Java),但是,我想使用 Python 和强制类型提示的原因是因为这允许我依赖现有的Python 个库(例如 Tensorflow),同时由于函数签名中指定的类型而确保编写的代码质量更好。
Mypy 公开了一堆选项,您可以设置这些选项来强制执行更严格或更宽松的类型检查,例如参见 [=12=]。对于您的情况,可能是 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]
我想知道是否有办法在 Python 项目中强制实施 type hints?
目前,我在 .pre-commit-config.yaml
:
- 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 and pre-commit hooks 组合,类型提示仍然没有完全执行,我将能够提交以下没有使用类型提示的代码:
def add(a, b):
return a + b
我也很好奇,如果在 Python 等动态类型语言中强制执行类型提示从一开始就是个好主意?我知道我可以为我的项目选择一些静态类型的语言(例如 Java),但是,我想使用 Python 和强制类型提示的原因是因为这允许我依赖现有的Python 个库(例如 Tensorflow),同时由于函数签名中指定的类型而确保编写的代码质量更好。
Mypy 公开了一堆选项,您可以设置这些选项来强制执行更严格或更宽松的类型检查,例如参见 [=12=]。对于您的情况,可能是 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]