
599
15
장
자료형 힌트 조금 더 알아보기
def max(__iterable: Iterable[T], *, key: Callable[[T], LT]) -> T:
...
@overload
def max(__iterable: Iterable[LT], *, key: None = ...,
default: DT) -> Union[LT, DT]:
...
@overload
def max(__iterable: Iterable[T], *, key: Callable[[T], LT],
default: DT) -> Union[T, DT]:
...
필자가 파이썬으로 구현한
max( )
는
typing
임포트와 함수와 변수의 선언 정도의 길이다. 덕
타이핑 덕분에
isinstance( )
로 검사할 필요 없이 선언된 자료형 힌트와 동일하게 에러를 검
사한다. 물론 런타임에 말이다.
@overload
의 가장 큰 장점은 주어진 인수의 자료형에 따라 가능한 한 정확히 반환형을 지정할
수 있다는 것이다. 다음 절에서는
max( )
의 오버로드를 한두 개씩 묶어 살펴보면서 이 장점을
알아보자.
인수가 SupportsLessThan을 구현하지만, 키와 기본값을 제공하지 않는 경우
@overload
def max(__arg1: LT, __arg2: LT, *_args: LT, key: None = ...) ...