Je lis le code cpython pour python 3k et j'ai remarqué que __missing__
est appelée seulement quand dict_subscript
est appelée, mais pas quand PyDict_GetItem
est utilisé. Quelle est la différence entre ces deux méthodes et quand chacune est appelée? Si je passe un PyObject qui est une sous-classe de dict et qui a la méthode __missing__
, comment puis-je forcer à l'utiliser, puisque PyDict_GetItem
ne le fait pas.cpython: quand PyDict_GetItem est appelé et quand dict_subscript?
1
A
Répondre
1
observations, suppositions, etc:
même chose se produit en Python 2.x.
dict_subscript
implémente l'équivalent de la méthode High_level dict.__getitem__
et sera donc appelé à chaque fois que adict[somekey]
apparaît autre que le LHS d'une affectation dans le code Python.
PyDict_GetItem
fait partie de l'API C. C'est peut-être un oubli que cela n'a pas été mis à jour.
Après avoir lu les commentaires terribles au début de PyDict_GetItem
, j'utiliserai PyDict_GetItemWithError
à la place ;-)
Peut-être que vous pouvez faire l'équivalent de niveau C de my_getitem = getattr(my_dict, '__getitem__')
une fois puis appeler.
Peut-être que vous pourriez soulever un billet bug ou demander sur comp.lang.python