Python自定义词典中的Dict更新

时间:2011-01-20 20:30:20

标签: python dictionary

我有一个dict的自定义实现,它覆盖并且由本机Python dict支持。但是,在设置时,它会对值进行一些预处理,并将其存储在某个专有对象中。获取后,此专有对象将转换为更自然的格式。

从此自定义dict调用时的所有功能都按我喜欢的方式运行。

问题在于当你调用{'a':1} .update(custom_dict({'b':2}))之类的东西时,更新后的dict中'b'的值是专有的内部存储对象,而不是处理后的价值。

Python的本机字典更新如何工作。我已经使用itemsiteritemsvaluesitervaluesget__getitem__覆盖了我能想到的所有方法,但我似乎没有指出任何更新尝试访问,这让我相信它可能正在使用c代码。想法?

- 更新 -

我刚刚在python源代码中找到了这个:

if (PyDict_Check(b)) {
    ...
}
else {
    /* Do it the generic, slower way */
    ...
}

也许这是一个错误,应该是PyDict_CheckExact(b),如代码中其他各个地方所示。

知道怎么打败这张支票吗?

1 个答案:

答案 0 :(得分:1)

检查一下,答案就在这里:Subclassing Python dictionary to override __setitem__

发布问题的人也发布了答案(这是公认的答案)。 希望有所帮助