객체가 내장 된 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
처럼 그들이 액세스 때마다 방법을 장식 할
는 여러 장식하는 더 나은 방법이 일부 개체의 메서드? 내가하지 가 IADD 방법을 구현해야하기 때문에
l += [1,2,3]
같은작업은 작동하지 않습니다.
이것을 단순화하려면 어떻게해야합니까?
당신이 전화 목록의 방법 중 하나는 예외가 발생하는 경우? 아직도 저축을 원하니? 당신은 현재의 해결책이 여전히 그것을합니다 ... –