ソースタイプとターゲットタイプが関連のない場合に、typing.cast 呼び出しを報告します。
ソースタイプがターゲットのサブタイプでなく、ターゲットタイプもソースのサブタイプでない場合にエラーが報告されます。
このようなキャストは論理エラーを示すことが多いです。あるタイプのインスタンスが他のインスタンスであると仮定できず、かつ typing.cast はタイプを動的に検証しません。
このチェックは、理論的に共通の子孫を持つ可能性があるタイプにも適用されます。
例えば、両方が Top から継承する Left と Right という兄弟クラス間のキャストにはフラグが立てられます。これらの間に直接の継承関係がないからです。
例:
from typing import cast
# 型がオーバーラップしていない — ミスの可能性があります
cast(int, "a") # 'str' -> 'int'
cast(list[int], ["a"]) # 'list[str]' -> 'list[int]'
# 推奨される明示的な回避策は "二重キャスト" を使用することです
cast(int, cast(object, "a")) # ok
# 正当なオーバーラップしているケース
cast(int, object()) # 有効なダウンキャスト
cast(object, 1) # 有効なアップキャスト
# list が非変であるため、次のキャストは無効です。 このインスペクションでは現在サポートされていません。
int_list = [1, 2, 3]
cast(list[object], int_list)
このインスペクションは静的な型情報に依存しています。型が不明な場合、警告は報告されません。 ジェネリック型の変性はまだ考慮されていません。