:PROPERTIES: :ID: dc2a8693-7158-4155-8eff-fc35a21a077d :mtime: 20220519084452 :ctime: 20220101172208 :END: #+title: La méthode __missing__ * Synthaxe #+BEGIN_SRC python object.__missing__(self, key) #+END_SRC La méthode ~object.__missing__~ définit le comportement à adopter par une classe fille de ~dict~ lors de l'accès à une clé non présente. Cette méthode est appelée par la méthode ~dict.__getitem__~ lorsque la clé demandée n'est pas présente dans le dictionnaire. La valeur de retour de la méthode ~object.__missing__~ permet de spécifier la valeur à retourner lorsque la méthode ~dict.__getitem__~ est appelée lorsque la clé n'est pas présente. * Exemples ** Comportement par défaut #+BEGIN_SRC python :result output d = {} key = "toto" dummy_key = f'{key}_' d[key] = [1, 2, 3] print(f'd[{key}]={d[key]}') print(f'd[{dummy_key}]={d[dummy_key]}') #+END_SRC #+BEGIN_SRC python ~Traceback (most recent call last): File "", line 11, in File "", line 9, in main KeyError: 'toto_'~ #+END_SRC ** Exemple de la création d'une entrée dans le dictionnaire en cas d'absence de la clé #+BEGIN_SRC python :results output class DictSubclass(dict): def __missing__(self, key): ret = [] self[key] = ret return ret d = DictSubclass() key = "toto" dummy_key = f'{key}_' d[key] = [1, 2, 3] print(f'd[{key}]={d[key]}') print(f'd[{dummy_key}]={d[dummy_key]}') #+END_SRC #+RESULTS: : d[toto]=[1, 2, 3] : d[toto_]=[] #+RESULT: * Références * [[https://blog.finxter.com/python-__missing__-magic-method/][Python __missing__() Magic Method (finxter)]]