制作当类的成员字典/列表更改时调用的方法

时间:2019-05-20 16:27:03

标签: python python-3.x

我希望在编辑(以任何方式)成员变量(即字典)时调用方法。

有什么方法可以实现而无需声明新类吗?

例如,

class MyClass:
    def __init__(self):
        self.dictionary = {}

    def __setattr__(self, key, value):
        super().__setattr__(key, value)
        # DO SOMETHING

这仅在我使用时有效

self.dictionary = {}

,什么时候不起作用

self.dictionary[some_key] = some_value

@property-@dictionary.setter的结果相同。

是的,我知道它将调用该字典的__setitem__,因此制作了一个新类,例如

class MyDict(dict):
    # override __setitem__ and other methods called when modifying the values

将起作用。

可是,

  1. 我也需要使用list,并且有很多方法可以修改值。

  2. 我需要像这样使用Dict[int, List[int]],它会非常混乱。

  3. 我需要使用pickle来转储数据,因此如果创建新类,则需要定义__getstate____setstate__以避免weakref错误。

+为了澄清起见,我最终想要的是一种MyClass的方法,在所有some_func的情况下都会被调用。

class MyClass:
    def __init__(self):
        self.data: Dict[int, List[int]] = {}

    def some_func(self):
        self.data[1].append(10)
        self.data.popitem()
        self.data[2] = []
        # And any other things that changes the data...

我将不胜感激,谢谢。

0 个答案:

没有答案