Tel*_*ome 3 python type-hinting mypy python-typing
我想使用一个类型检查器来帮助我编写好的代码,而且我认为mypy 可以满足我的需求。但是我不知道如何编写以下代码。
import typing as tau
Offset = tau.NewType('Offset', tau.Tuple[int, int])
def f(x: int, y: int) -> Offset:
return x, y
important_for_me = Offset != tau.Tuple[int, int]
assert important_for_me
Run Code Online (Sandbox Code Playgroud)
对于我正在编写的框架,重要的是不仅要为类型分配标识符,而且我仍然希望类型检查器知道如何帮助我(所以不要只分配 TypeVar 并丢失信息)。
Typing.NewType 工作得很好,但 mypy 在第 7 行给了我一个错误:
不兼容的返回值类型(得到“Tuple[int, int]”,预期为“Offset”)
有没有一种方法可以像我一样编写它,但是类型检查器可以理解它?
您需要Offset从x, y元组中显式创建一个:
def f(x: int, y: int) -> Offset:
return Offset((x, y))
Run Code Online (Sandbox Code Playgroud)
这是因为,来自NewType 辅助函数:“类型检查器需要从预期的int位置进行显式转换UserId”,或者在您的情况下: from Tuple[int, int]to Offset。
可能只是为了你的例子,但如果f真的没有在返回 an 之前x和y之前执行任何验证Offset,那么NewType这里是不必要的。在这种情况下,我建议声明Offset为:
Offset = tau.Tuple[int, int]
Run Code Online (Sandbox Code Playgroud)
这是一个类型别名。