소스와 타깃 타입이 관련이 없는 typing.cast 호출을 보고합니다.

소스 타입이 타깃의 하위 타입이 아니거나 타깃 타입이 소스의 하위 타입이 아닐 때 오류가 보고됩니다. 이러한 형 변환은 논리적 오류를 나타내는 경우가 많습니다. 한 타입의 인스턴스를 다른 타입의 인스턴스로 가정할 수 없으며, typing.cast는 동적으로 타입을 검증하지 않습니다.

이 검사는 이론적으로 공통 하위 항목을 가질 수 있는 타입에도 적용됩니다. 예를 들어, 클래스 Top을 상속받는 두 동위 클래스 LeftRight의 경우, 서로 직접적 상속 관계가 없기 때문에 둘 간의 형 변환을 플래그로 표시합니다.

예:


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)

검사는 정적 타입 정보를 기반으로 합니다. 타입이 알려지지 않은 경우 경고가 보고되지 않습니다. 제네릭 타입의 변형은 아직 고려되지 않았습니다.