我有一个dict的自定义实现,该实现将覆盖本机Python dict并从总体上支持它。但是,设置时,它将对值进行一些预处理,并将其存储在某些专有对象中。获取时,此专有对象随后将转换为更自然的格式。
从此自定义dict调用时,所有功能均按我的方式运行。
问题是,当您调用类似{'a':1} .update(custom_dict({'b':2}))之类的东西时,更新后的dict中'b'的值是专有内部存储对象,而不是处理后的值。
Python的本机dict更新如何工作。我已经使用items,iteritems,values,itervalues,get和__getitem__覆盖了所有我能想到的方法,但是我似乎并没有对任何那些更新尝试访问,这使我相信它可能正在使用c代码。有什么想法吗?
-更新-
我刚刚在python源代码中找到了这个:
if (PyDict_Check(b)) {
...
}
else {
/* Do it the generic, slower way */
...
}
也许这是一个错误,应该在代码的其他各个位置显示为
PyDict_CheckExact(b)。
知道如何击败这张支票吗?
请您参考如下方法:
检查一下,答案就在这里:Subclassing Python dictionary to override __setitem__
发布问题的人也发布了答案(已被接受)。
希望能有所帮助
