如何在Mypy中使用名义输入?

时间:2019-06-21 22:53:24

标签: python mypy python-typing

这不是我的确切用例,但类似。假设我要定义两个键入注释:

Matrix = np.ndarray
Vector = np.ndarray

现在,当我将Matrix传递给接受Vector的函数时,我希望潜在的类型检查器抱怨:

def f(x: Vector):
    ...

m: Matrix = ...
f(m)  # Bad!

如何将这些类型标记为不兼容?

1 个答案:

答案 0 :(得分:1)

看来我可以使用typing.NewType来创建不同的类型:

from typing import NewType


A = NewType('A', int)
B = NewType('B', int)

def f(a: A):
    pass

b: B
f(b)

给予

a.py:11: error: Argument 1 to "f" has incompatible type "B"; expected "A"

不幸的是,它只有在np.ndarray实现类型提示或numpy支持NewType的基本类型后才能与Any一起使用。