Files
org-roamings/20220101172208-la_methode___missing__.org
2022-01-04 14:37:13 +01:00

59 lines
1.6 KiB
Org Mode

:PROPERTIES:
:ID: dc2a8693-7158-4155-8eff-fc35a21a077d
:mtime: 20220101184431
: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)]]