说我有类似的东西(未经测试):
class Foo(object):
def __init__(self):
self.store = {}
def __setitem__(self, key, value):
self.store[key] = value
print('Detected set')
def __getitem__(self, key):
return self.store[key]
仅当对象本身发生更改时才会调用 __setitem__
:
foo = Foo()
foo['bar'] = 'baz'
但是,例如,在以下情况下不会调用它:
foo['bar'] = {}
foo['bar']['baz'] = 'not detected inside dict'
我怎样才能发现这种情况,还是有其他方法可以做到这一点?我的目标是拥有一个类似于字典的对象,它总是与磁盘上的文件同步。
答案 0 :(得分:1)
我建议使用shelve
。我提供了一个持久的字典。
使用writeback=True
打开文件强制与文件同步:
db = shelve.open('test.db', writeback=True)
就像dict一样对待它:
>>> db['a'] = {}
>>> db['a']['x'] = 10
>>> dict(db)
{'a': {'x': 10}}
关闭重新开启:
>>> db.close()
>>> db = shelve.open('test.db', writeback=True)
>>> dict(db)
{'a': {'x': 10}}
数据仍在那里。