from shelve import open as sop
class Ser:
def __init__(self, path, init=False):
self.path = path
if init:
with sop(path, 'w') as f:
f['dic'] = {}
print(f'init on {path}, succeed.')
else:
with sop(path) as f:
dic = f['dic']
for key, value in dic.items():
setattr(self, key, value)
def save(self):
dic_var = vars(self)
with sop(self.path) as f:
f['dic'] = dic_var
def show_dic(self):
dic_var = vars(self)
for key, value in dic_var:
print(f'{key}: {value}')
return dic_var
def show_lst(self):
dic_var = vars(self)
return dic_var.keys()
if __name__ == '__main__':
class C: pass
# write
s = Ser('data\\data.io', True)
c = C()
s.a, s.b, s.c = ('Hello', 123, c)
s.save()
# read
s = Ser('data\\data.io')
assert (s.a, s.b, s.c) == ('Hello', 123, c)
绕过shelve模块进行序列化