ch02_ex5.py에서 자주 쓰이는 타입 힌트와 함수 설명
1. isinstance()
- 파이썬 내장 함수로, 객체가 특정 클래스(혹은 그 하위 클래스)의 인스턴스인지 확인할 때 사용합니다.
- 문법:
isinstance(객체, 클래스)
- 여러 타입을 튜플로 전달 가능:
isinstance(x, (int, float))
class A: pass
class B(A): pass
b = B()
print(isinstance(b, A)) # True (B는 A의 하위 클래스)
2. cast()
(typing 모듈)
- 정적 타입 검사기(예: mypy)에게 "이 값은 내가 지정한 타입이라고 간주해라"라고 알려주는 용도입니다.
- 런타임에는 아무런 변환도 하지 않고, 값 자체를 그대로 반환합니다.
- 잘못된 타입을 cast해도 런타임 오류는 발생하지 않지만, 실제 사용 시 타입이 맞지 않으면 AttributeError 등은 발생할 수 있습니다.
from typing import cast
def foo(x: object):
y = cast(str, x) # 타입 검사기에게 y는 str이라고 알려줌
return y
3. @overload
(typing 모듈)
- 함수나 메서드가 여러 가지 시그니처(입력 타입/개수)에 따라 다르게 동작할 수 있음을 타입 검사기에게 알려주는 데코레이터입니다.
- 실제 구현은 마지막에 한 번만 작성하고, 그 위에 여러 개의 @overload 시그니처를 선언합니다.
- 런타임에는 아무 영향이 없고, 타입 검사기만 참고합니다.
from typing import overload
@overload
def func(x: int) -> int: ...
@overload
def func(x: str) -> str: ...
def func(x):
# 실제 구현
if isinstance(x, int):
return x + 1
return x.upper()
4. Union[]
(typing 모듈)
- 여러 타입 중 하나가 올 수 있음을 명시합니다.
- 예시:
Union[int, str]
는 int 또는 str 타입이 올 수 있음을 의미합니다.
from typing import Union
def foo(x: Union[int, str]):
print(x)
5. Optional[]
(typing 모듈)
- 특정 타입 또는 None이 올 수 있음을 명시합니다.
Optional[X]
는Union[X, None]
과 같습니다.
from typing import Optional
def foo(x: Optional[int]):
if x is not None:
print(x + 1)
else:
print("None!")
6. 실전 예시 (Hand4 생성자)
class Hand4:
@overload
def __init__(self, arg1: "Hand4") -> None: ...
@overload
def __init__(self, arg1: "Hand4", arg2: Card, *, split: int) -> None: ...
@overload
def __init__(self, arg1: Card, arg2: Card, arg3: Card) -> None: ...
def __init__(self, arg1: Union["Hand4", Card], arg2: Optional[Card]=None, arg3: Optional[Card]=None, split: Optional[int]=None):
# ...구현 생략...
- 이렇게 여러 생성자 시그니처를 타입 검사기에 명확히 알려줄 수 있습니다.
7. 참고 자료
타입 힌트는 개발자와 도구(IDE, mypy 등)를 위한 정보입니다.
'Language > python' 카테고리의 다른 글
py project toml 확장자 탐구 생활 (1) | 2025.07.05 |
---|---|
python Ellipsis ( ... ) + pass 설명 (0) | 2025.07.01 |
python map 사용 방법 설명 (0) | 2025.06.29 |
파이썬 uv 패키지 관리 사용 방법 (0) | 2025.06.29 |
python test module doctest 사용방법 정리 (0) | 2025.06.29 |