objectif
Fournir plusieurs signatures type-safe pour une même fonction.
code minimal
from typing import overload, Union
@overload
def parse(x: bytes) -> int: ...
@overload
def parse(x: str) -> int: ...
def parse(x: Union[str, bytes]) -> int:
s = x.decode() if isinstance(x, (bytes, bytearray)) else x
return int(s)
print(parse("3") == 3 and parse(b"4") == 4) # attendu: True
utilisation
from typing import overload, Sequence, Any
@overload
def head(xs: Sequence[Any]) -> Any: ...
def head(xs):
return xs[0]
print(head([10,20]) == 10)
variante(s) utile(s)
from typing import overload
print(callable(overload))
notes
- Les overloads sont analysés par les type-checkers; une seule implémentation.
- Gardez les overloads de la plus spécifique à la plus générale.