MyPy中的类型断言

问题描述

numpy.intersect1d之类的某些函数返回不同的类型(在这种情况下为ndarray或三个ndarray的元组),但是编译器只能推断其中之一,因此,如果我喜欢这样做:

intersection: np.ndarray = np.intersect1d([1,2,3],[5,6,2])

它会引发类型警告:

Expected type 'ndarray',got 'Tuple[ndarray,ndarray,ndarray]' instead

在其他语言(如Typescript)中,我可以避免使用此类问题,例如可以在assert the type中使用as关键字(对运行时没有影响)。我已经阅读了文档并看到了cast函数,但是我想知道是否有任何 inline 解决方案或我缺少的东西。

解决方法

根据MyPy documentation,有两种方法可以进行类型断言:

  • 作为内联表达式,可以使用cast函数。文档说这通常是从超类型转换为子类型的,但是并没有说在其他情况下不能使用它。
  • 作为声明,您可以使用assert isinstance(...,...),但这仅适用于在运行时表示的具体类型,例如intlist,而不是更复杂的类型,例如{{1 }},List[int]无法检查。

由于文档中没有提及其他任何类型的断言方法,因此看来这是唯一的方法。

相关问答

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