59 lines
1.6 KiB
Org Mode
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)]]
|
|
|