在 MyPy 中键入断言

问题描述 投票:0回答:1

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,我可以使用

as
关键字来断言类型(不会影响运行时)。我已阅读文档并看到了 cast 函数,但我想知道是否有任何 inline 解决方案或我缺少的东西。

python python-typing mypy
1个回答
17
投票

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

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

由于文档没有提到任何其他进行类型断言的方法,因此似乎这些是唯一的方法。

© www.soinside.com 2019 - 2024. All rights reserved.