cpython:调用PyDict_GetItem时和dict_subscript?

时间:2010-03-18 15:17:04

标签: python dictionary cpython

我正在阅读python 3k的cpython代码,我注意到,只有在调用__missing__时调用dict_subscript,而在使用PyDict_GetItem时调用__missing__。这两种方法之间的区别是什么?如果我传递一个作为dict的子类且具有PyDict_GetItem方法的PyObject,我怎么能强制使用它,因为{{1}}不会这样做。

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