绕过shelve模块进行序列化

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模块进行序列化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值