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