我試圖讓一個對象像一個內置的list
一樣行爲,除了它的值在修改後保存。如何實現持久化Python列表?
我想到的實現是將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)
有幾個問題與此實現:
我每天他們 訪問時間來裝點像
append
方法,有沒有更好的方式來裝飾多某些 對象的方法?操作,如
l += [1,2,3]
不工作,因爲我還沒有 實施IADD方法。
我該怎麼做才能簡化這個?
如果你調用列表中的方法之一將引發異常怎麼辦?你還想要保存嗎?你目前的解決方案仍然... – 2012-02-26 01:48:37