Skip to main content
 首页 » 编程设计

python之自定义字典的Python字典更新

2025年05月04日8me-sa

我有一个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__

发布问题的人也发布了答案(已被接受)。
希望能有所帮助