相关疑难解决方法(0)

如何实现持久的Python`list`?

我试图让一个对象像内置一样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)

这个实现有几个问题:

  1. 我必须像append每次访问时一样修饰方法,有没有更好的方法来装饰某些对象的多个方法?

  2. l += [1,2,3]我没有实现iadd方法那样的操作不起作用. …

python

8
推荐指数
1
解决办法
2716
查看次数

标签 统计

python ×1