【发布时间】:2019-05-21 18:37:17
【问题描述】:
我在 SO 上看到过一些类似的问题,关于检测字典的更改并在字典更改时调用函数,例如:
这些示例使用观察者模式的变体或重载__setitem__,但所有这些示例都没有检测到嵌套字典值的变化。
例如,如果我有:
my_dict = {'a': {'b': 1}}
my_dict['a']['b'] = 2
不会检测到2 对元素['a']['b'] 的分配。
我想知道是否有一种优雅的方法可以检测不仅字典的基本元素而且嵌套字典的所有子元素的更改。
【问题讨论】:
-
检测变化是什么意思?在您不知情的情况下如何进行更改?我认为这里还有一些您没有涉及的更广泛的方面。
-
my_dict['a']...正在获取而不是设置项目,然后...['b'] = 2正在设置孩子。孩子还必须具有自定义行为。 -
如果您查看提供的示例链接,您就会明白我的意思。我认为这很清楚。例如,当分配
my_dict['a']['b'] = 2时,我希望能够检测到嵌套字典中的值['a']['b']发生了变化,并根据变化运行特定的函数。 -
好吧,现在,你只是举一个使用普通字典的例子。大概你已经对它进行了子类化
-
如第二个链接所示,我们为什么不递归地将所有嵌套字典转换为自定义
MyDicts 子类化dict?
标签: python dictionary