问题描述
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(...,...)
,但这仅适用于在运行时表示的具体类型,例如int
或list
,而不是更复杂的类型,例如{{1 }},List[int]
无法检查。
由于文档中没有提及其他任何类型的断言方法,因此看来这是唯一的方法。