我希望在编辑(以任何方式)成员变量(即字典)时调用方法。
有什么方法可以实现而无需声明新类吗?
例如,
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
将起作用。
可是,
我也需要使用list,并且有很多方法可以修改值。
我需要像这样使用Dict[int, List[int]]
,它会非常混乱。
我需要使用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...
我将不胜感激,谢谢。