python 3 : hook list & dict changes

标签 python python-3.x hook

我的应用程序依赖于 listdict 数据结构来维护当前状态。现在我需要跟踪何时从列表中添加/删除元素或字典数据更改。我用谷歌搜索并发现有 collections.abc.Sequence(用于列表)和 collections.abc.MutableMapping(用于 dict),但它们非常有限结果不能用来代替列表/字典(appendclear,...)。我一直在考虑一些代理类,它会转发调用并提供在转发某些方法之前/之后要调用的 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/

相关文章:

python - 无法将 pandas 日期时间列与从数据库获取的日期时间进行比较

python-3.x - scikit-learn FunctionTransformer 的用途是什么?

node.js - Sequelize.js afterFind 参数说明

python - matlab数据文件到pandas DataFrame

Python HTML : Extract Parts of Text from html file

python - 如何使用 matplotlib/python 绘制地理数据

php - 尝试在 woocommerce Analytics -> 订单报告表中添加订单项目名称列(并输出到 csv 文件)

python-3.x - PyQt5 和 QtQuick

python - 如何在Python中识别 "NoSuchObject"?

svn - svn 中的预提交钩子(Hook) : could not be translated from the native locale to UTF-8