2010-03-18 7 views
1

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?

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

Questions connexes