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