PL/Python
[Python] 타입을 호환하는, Generics
SweetDev
2021. 12. 29. 14:22
파이썬은 원래 동적 타입 언어라서 타입이 없지만...
타입을 명시해서 혼란을 낮추는 방법이 존재한다.
그 중 Generics는 여러 타입을 허용한다.
데이터 형식에 의존하지 않고 인자, 변수 또는 반환값 등이 여러 다른 데이터 타입들을 가질 수 있는 방식을 제네릭이라고 한다.
from typing import TypeVar
T = TypeVar('T')
U = TypeVar('U')
def are_equal(a:T, b:U) -> bool:
return a == b
print(are_equal(10, 10.0)) # True
example
async def _crawl_and_reduce(
self,
urls: Iterable[str],
parse_fn: Optional[Callable[[str], T]] = None,
callback_fn: Optional[Callable[[Optional[T]], None]] = None,
):
TypeVar
T = TypeVar("T", str, int)
TypeVar에는 추가적인 인자도 입력할 수 있는데 위와 같이 원하는 타입을 입력함으로써 해당 제네릭 타입은 str 또는 int라는 제한을 둘 수 있다.
T = TypeVar("T", bound=int)
또는 위처럼 bound인자에 원하는 타입을 입력하여 해당 타입 또는 해당 타입을 상속받은 타입이라고 명시해줄 수 있다. 위 예제는 int 또는 int를 상속받은 타입이라는 걸 나타낸다.
제네릭을 사용하는 이유
제네릭을 사용하면 매번 타입을 변환할 필요가 없고, 그러므로 함수를 인자의 타입에 따라 반복적으로 정의할 필요도 없다.
따라서 코드가 간결해지고 코드의 재사용성도 높아진다.
출처