← retour aux snippets

functools: fonctions génériques avec singledispatch

Spécialiser le comportement selon le type de l'argument.

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.