【问题标题】:Type assertion in MyPyMyPy 中的类型断言
【发布时间】:2020-09-10 12:27:36
【问题描述】:

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 关键字到 assert the type(在运行时没有影响)。我已经阅读了文档并看到了 cast 函数,但我想知道是否有任何 inline 解决方案或我缺少的东西。

【问题讨论】:

标签: python python-3.x mypy


【解决方案1】:

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

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

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

【讨论】:

  • 2022 年的类型断言你会如何 cast?链接已经失效了
  • @matanster 解决方案是一样的,只是文档页面被移动到了不同的 URL。我已经更新了链接。
猜你喜欢
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2018-11-19
  • 2014-01-22
  • 1970-01-01
相关资源
最近更新 更多