← retour aux snippets

typing.overload: définir des signatures surchargées

Fournir plusieurs signatures type-safe pour une même fonction.

python typing #typing#overload#types

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.