objectif
Spécialiser le comportement selon le type de l’argument.
code minimal
from functools import singledispatch
@singledispatch
def dump(obj):
return f"<{type(obj).__name__}>"
@dump.register
def _dump_str(obj: str):
return obj.upper()
@dump.register
def _dump_int(obj: int):
return obj + 1
print(dump("hi") == "HI" and dump(1) == 2) # attendu: True
utilisation
from functools import singledispatch
print(callable(singledispatch))
variante(s) utile(s)
from functools import singledispatch
@singledispatch
def size(obj): return len(str(obj))
@size.register
def _size_list(obj: list): return len(obj)
print(size([1,2,3]) == 3)
notes
- Déclarez la fonction générique avant d’enregistrer des variantes.
- Utile pour sérialisation, validation, etc.