在数据库中存储序列化对象,然后从键恢复对象状态

2024-06-06 23:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这很有趣。在

代码将最好地说明我的想法:

class Restorable(object):
    def __init__(self, a=1, b=1):
        self.a = a
        self.b = b

    def restore(self, serialized_object):
        # I'm aware this is local, just illustrating
        self = pickle.loads(serialized_object)

r = Restorable()
r.a = 1000
r.b = 2000
saved_state = pickle.dumps(r)
r.a = -1
r.b = -1
r.restore(pickle.dumps(saved_state)
# r.a should again be 1000
# r.b should again be 2000

这个想法是:可以,比如说,pickle.dumps()一个对象,将其存储在某处,修改真实的对象,然后通过我安全存储的内容将其恢复到以前的状态?在

我已经尝试过上面显示的代码,它会暂时将self设置为以前的状态,但只是局部的-好吧,这里并不奇怪。在

这是个好奇的问题。在

编辑:将问题表述清楚:

是否可以编写一个使用相同类型的序列化对象来恢复其状态的对象?在

实际上,我认为这可以通过在restore()内创建序列化对象的实例并逐个复制值来实现。但对于大型物体来说,这可能很乏味。在


Tags: 对象代码selfobject状态defrestorepickle
1条回答
网友
1楼 · 发布于 2024-06-06 23:23:28

正如您在编辑中所说的,创建一个新的对象(显然不要指定给self),但是您可以不逐个复制属性

def restore(self, serialized_object):
    original = pickle.loads(serialized_object)
    self.__dict__.update(original.__dict__)

同时更新所有属性。以下是您的完整(返工)示例:

^{pr2}$

相关问题 更多 >