1

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

4

1 回答 1

1

观察、猜测等:

在 Python 2.x 中也会发生同样的情况。

dict_subscript实现了 high_level 方法的等价物,因此只要出现在 Python 代码中赋值的 LHS 以外的地方dict.__getitem__就会被调用。adict[somekey]

PyDict_GetItem是 C API 的一部分。也许它没有更新是一个疏忽。

在阅读了开头的可怕评论后PyDict_GetItem,我会PyDict_GetItemWithError改用 ;-)

也许你可以做一次 C 级的等价物,my_getitem = getattr(my_dict, '__getitem__')然后调用它。

也许您可以提出错误票或在 comp.lang.python 上询问

于 2010-03-18T22:16:18.077 回答