簡體   English   中英

MyPy 中的類型斷言

[英]Type assertion in 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 等其他語言中避免此類問題,我可以使用as關鍵字來斷言類型(在運行時沒有影響)。 我已經閱讀了文檔並看到了cast函數,但我想知道是否有任何內聯解決方案或我缺少的東西。

根據MyPy 文檔,有兩種方法可以進行類型斷言:

  • 作為內聯表達式,您可以使用typing.cast(..., ...)函數。 文檔說這“通常”是為了從超類型轉換為子類型,但並沒有說你不能在其他情況下使用它。
  • 作為聲明,您可以使用assert isinstance(..., ...) ,但這僅適用於在運行時表示的具體類型,如intlist ,而不適用於更復雜的類型,如List[int]不能由isinstance

由於文檔沒有提到任何其他進行類型斷言的方法,似乎這些是唯一的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM