Python NewType'X',Y:mypy显示错误:得到Y,预期为X

问题描述

我想使用一个类型检查器来帮助我编写良好的代码,并且我认为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

对于我正在编写的框架,重要的是不仅要为类型分配标识符,而且我仍然希望类型检查器知道如何为我提供帮助(因此,不仅要分配TypeVar并丢失信息)。

typing.NewType可以很好地工作,但是mypy在第7行给了我一个错误:

不兼容的返回值类型(预期为“ Tuple [int,int]”) “偏移”)

有没有一种方法可以像我一样写,但类型检查器可以理解?

error

解决方法

您需要根据Offset元组显式创建一个x,y

def f(x: int,y: int) -> Offset:
    return Offset((x,y))

这是因为,从NewType helper function开始:“类型检查器要求从intUserId的显式转换”,或者在您的情况下:从Tuple[int,int]到{{ 1}}。

可能只是您的示例,但是如果Offset确实没有对fx进行任何验证,然后返回y,则此处返回Offset是没有必要的。在这种情况下,我建议将NewType声明为:

Offset

type alias

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...