我知道如何在每次修改类的属性时使用属性设置器来执行操作,以避免每次更改变量时都必须在每个操作中编码。
我想知道是否有可能为列表和词典等变量做同样的事情?
我想要实现的目标如下,
我有一本字典d = {string : object}
object
一个类的实例,其属性名为x
。
当我向字典添加新的string:object
对,并且对象的属性x
为!= 0
时,我还将object
添加到列表中叫x_instances
。
答案 0 :(得分:1)
您必须使用自定义类;您可以继承dict
或collections.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()
。