← retour aux snippets

collections.UserDict: dictionnaire avec validation

Créer un dict custom validant les clés/valeurs à chaque assignation.

python collections #collections#validation

objectif

Créer un dict custom validant les clés/valeurs à chaque assignation.

code minimal

from collections import UserDict
class PositiveIntDict(UserDict):
    def __setitem__(self, k, v):
        if not isinstance(v, int) or v < 0:
            raise ValueError("value must be non-negative int")
        super().__setitem__(k, v)
d = PositiveIntDict()
d["ok"] = 1
print(d["ok"] == 1)  # attendu: True

utilisation

from collections import UserDict
class NonEmptyStrKeys(UserDict):
    def __setitem__(self, k, v):
        if not isinstance(k, str) or not k:
            raise KeyError("key must be non-empty str")
        super().__setitem__(k, v)
d = NonEmptyStrKeys()
d["k"] = "v"
print("k" in d)

variante(s) utile(s)

from collections import UserDict
print(issubclass(UserDict, dict) is False)

notes

  • UserDict wrappe un dict dans l’attribut .data, pratique pour surcharger.
  • Évitez d’hériter directement de dict pour ne pas manquer certains hooks.