first commit
This commit is contained in:
58
20220101172208-la_methode___missing__.org
Normal file
58
20220101172208-la_methode___missing__.org
Normal file
@@ -0,0 +1,58 @@
|
||||
: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)]]
|
||||
|
Reference in New Issue
Block a user