我的应用程序依赖于 list
和 dict
数据结构来维护当前状态。现在我需要跟踪何时从列表中添加/删除元素或字典数据更改。我用谷歌搜索并发现有 collections.abc.Sequence
(用于列表)和 collections.abc.MutableMapping
(用于 dict),但它们非常有限结果不能用来代替列表/字典(append
,clear
,...)。我一直在考虑一些代理类,它会转发调用并提供在转发某些方法之前/之后要调用的 Hook ,但没有找到任何看起来像的东西。
所以我的问题是:如何 Hook 给定结构的突变体?有什么我不知道的吗?
最佳答案
子类字典可能:
class DictWatch(dict):
def __init__(self, *args, **kwargs):
self.callback = kwargs.pop('callback')
dict.__init__(self, args)
def __setitem__(self, key, val):
# YOUR HOOK HERE
self.callback(key, val)
dict.__setitem__(self, key, val)
# and other overrided dict methods if you need them
演示:
>>> def cb(k,v):
... print k,v
...
>>> d=DictWatch(callback=cb)
>>> d['key']='100'
key 100
关于 python 3 : hook list & dict changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510223/