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