: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 "<stdin>", line 11, in <module>
  File "<stdin>", 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)]]

