我正在阅读python 3k的cpython代码,我注意到,只有在调用__missing__
时调用dict_subscript
,而在使用PyDict_GetItem
时调用__missing__
。这两种方法之间的区别是什么?如果我传递一个作为dict的子类且具有PyDict_GetItem
方法的PyObject,我怎么能强制使用它,因为{{1}}不会这样做。
答案 0 :(得分:1)
观察,猜测等:
在Python 2.x中也是如此。
dict_subscript
实现了high_level dict.__getitem__
方法的等价物,因此只要出现adict[somekey]
而不是Python代码中赋值的LHS,就会调用它。
PyDict_GetItem
是C API的一部分。也许这是一个疏忽,它还没有更新。
在PyDict_GetItem
开头阅读了可疑评论后,我将使用PyDict_GetItemWithError
代替; - )
也许你可以做一次等同于my_getitem = getattr(my_dict, '__getitem__')
的C级别,然后再调用它。
也许您可以提出错误提示或询问comp.lang.python