报告 typing.cast 调用,其中源类型和目标类型无关。

当源类型既不是目标类型的子类,也不是目标类型的超类时,将报告错误。 这类转换通常指示逻辑错误,因为一种类型的实例不能被假定为另一种类型的实例, 并且 typing.cast 不会动态验证类型。

此检查适用于理论上可能具有共同后代的类型。 例如,它将标记两个同级类 LeftRight 之间的转换, 因为它们都继承自 Top,但彼此之间没有直接继承关系。

示例:


from typing import cast

# 非重叠类型 — 可能是错误
cast(int, "a")          # 'str' -> 'int'
cast(list[int], ["a"])  # 'list[str]' -> 'list[int]'

# 推荐的显式逃生舱口是使用“双重转换”
cast(int, cast(object, "a"))  # 正常

# 合法的重叠情况
cast(int, object())    # 有效的向下转换
cast(object, 1)        # 有效的向上转换

# 但以下是无效转换,因为 list 不可变。 当前不受此检查支持
int_list = [1, 2, 3]
cast(list[object], int_list)

该检查依赖于静态类型信息;当类型未知时,不会报告警告。 尚未考虑泛型类型的差异。