我试图让一个对象像内置一样list
,除了它的值在修改后保存.
我提出的实现是list
在一个PersistentList
类中包装.对于可能更改列表的方法的每次访问,包装器委托给包装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)
Run Code Online (Sandbox Code Playgroud)
这个实现有几个问题:
我必须像append
每次访问时一样修饰方法,有没有更好的方法来装饰某些对象的多个方法?
像l += [1,2,3]
我没有实现iadd方法那样的操作不起作用. …
python ×1