같은 이름의 함수를 여러 번 정의해도 오버로딩되지 않아
뒤의 정의가 앞의 정의를 덮으므로, 무엇을 기준으로 구현을 고를지 명시해야 해.
타입 기준이면 singledispatch
functools.singledispatch는 첫 인자의 런타임 타입에 따라 등록된 구현을 골라. 메서드에는 singledispatchmethod가 같은 역할을 해.
정적 계약이면 overload
typing.overload는 타입 검사기와 IDE에 여러 시그니처를 보여주지만 실행 시에는 하나의 실제 구현만 있어야 해.
값의 모양이면 match
딕셔너리 키, 시퀀스 길이, 리터럴처럼 구조와 값으로 나눈다면 match가 더 직접적이야. 타입·정적 시그니처·구조 중 무엇을 구분하는지로 선택해.