报告调用 `typing.cast` 时,源类型的任何可能值都无法分配给目标类型。 我们可以将这称为“非重叠”类型。
这通常表明有错误。 如果转换是故意的,首先将表达式转换为公共父类型,以明确表达意图。
示例:
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)
检查依赖于静态类型信息; 当类型未知时,不会报告警告。 尚未考虑泛型类型的变化。