我已经分类dict
并且需要检测它的所有修改.
(我知道我无法检测到存储值的就地修改.没关系.)
我的代码:
def __setitem__(self, key, value): super().__setitem__(key, value) self.modified = True def __delitem__(self, key): super().__delitem__(key) self.modified = True
问题是它只适用于简单的分配或删除.它未检测到所做的更改pop()
,popitem()
,clear()
和update()
.
为什么__setitem__
和__delitem__
当项目被添加或删除绕过?我是否还必须重新定义所有这些方法(pop
等等)?
对于这种用法,您不应该继承dict
class,而是使用collections
Python标准库模块的抽象类.
您应该对MutableMapping
抽象类进行子类化并覆盖以下方法:__getitem__
,__setitem__
和__delitem__
,__iter__
以及__len__
使用内部字典的所有方法.抽象基类确保所有其他方法都将使用这些方法.
class MyDict(collections.MutableMapping): def __init__(self): self.d = {} # other initializations ... def __setitem__(self, key, value): self.d[key] = value self.modified = true ...