我正在阅读Python3k的cpython代码,我注意到,只有在调用dict_subscript时才会调用__missing__,但在使用PyDict_GetItem时不会调用。这两个方法之间的区别是什么,以及何时调用它们?如果我传递的PyObject是dict的子类并且有__missing__方法,我怎么能强制使用它,因为PyDict_GetItem不这样做。
发布于 2010-03-19 06:16:18
观察、猜测等:
在Python 2.x中也发生了同样的情况。
dict_subscript实现了与high_level dict.__getitem__方法等效的方法,因此只要adict[somekey]出现,而不是在Python代码中的赋值的LHS上出现,就会被调用。
PyDict_GetItem是C应用编程接口的一部分。也许这是一个疏忽,因为它还没有更新。
在阅读了PyDict_GetItem开头的可怕评论后,我将改用PyDict_GetItemWithError ;-)
也许你可以做一次C级的my_getitem = getattr(my_dict, '__getitem__'),然后调用它。
也许你可以提出一个错误标签或者在comp.lang.python上询问
https://stackoverflow.com/questions/2470928
复制相似问题