在Python中更新mutable时自动执行操作

时间:2016-09-08 15:18:55

标签: python list dictionary getter-setter

我知道如何在每次修改类的属性时使用属性设置器来执行操作,以避免每次更改变量时都必须在每个操作中编码。

我想知道是否有可能为列表和词典等变量做同样的事情?

我想要实现的目标如下,

我有一本字典d = {string : object}

object一个类的实例,其属性名为x

当我向字典添加新的string:object对,并且对象的属性x!= 0时,我还将object添加到列表中叫x_instances

1 个答案:

答案 0 :(得分:1)

您必须使用自定义类;您可以继承dictcollections.UserDict(),并覆盖相应的container special methods以检测更改。

例如,object[subscription] = value已翻译为object.__setitem__(subscription, value),让您检查value并采取相应措施:

class MutationDictionary(dict):
    def __setitem__(self, key, value):
        super().__setitem__(key, value)
        if isinstance(value, SomeClass) and value.x != 0:
            x_instances.append(value)

请查看other methods that dict objects implement;例如,您可能还想覆盖dict.setdefault()