我试图使一个对象像一个内置的list,只是它的值一旦修改就会被保存。在
我提出的实现是在一个PersistentList类中包装list。对于每次访问可能更改列表的方法,包装器都会委托给包装好的list,并在调用后将其保存到键值数据库中。在
代码:class PersistentList(object):
def __init__(self, key):
self.key = key
self._list = db.get(key, [])
def __getattr__(self, name):
attr = getattr(self._list, name)
if attr:
if attr in ('append', 'extend', 'insert', 'pop',
'remove', 'reverse', 'sort'):
attr = self._autosave(attr)
return attr
raise AttributeError
def _autosave(self, func):
@wraps(func)
def _(*args, **kwargs):
ret = func(*args, **kwargs)
self._save()
return ret
return _
def _save(self):
db.set(self.key, self._list)
这种实现有几个问题:我每次都要修饰像append这样的方法
有没有更好的方法来装饰一些方法
反对?
像l += [1,2,3]这样的操作不起作用,因为我没有
实现了iadd方法。
我能做些什么来简化这件事?在