How can I be specific when I am using Union of types, let's say I have wrote a function which accepts either str or list and outputs whatever type was passed in, consider the following example
from typing import Union
def concat(x1: Union[str, list], x2: Union[str, list]) -> Union[str, list]:
return x1 x2
I want the above example to be more specific like x1, x2 and returned value from the function all three must match the same types, but those types must be either str or list.
CodePudding user response:
from typing import TypeVar, Union
T = TypeVar("T")
def concat(x1: T, x2: T) -> T:
return x1 x2
CodePudding user response:
The typing library has a @overload annotation that will do what you want. Note that it doesn't work exactly the same as overloading in other languages like java. You cannot create an overload with a different number of argument.
From the documentation:
@overload
def process(response: None) -> None:
...
@overload
def process(response: int) -> tuple[int, str]:
...
@overload
def process(response: bytes) -> str:
...
def process(response):
<actual implementation>
https://docs.python.org/3/library/typing.html#typing.overload
