如何使用load函数更新类属性



我有一个类,其中方法save使用pickle包将创建的对象存储到磁盘:

def save(
self,
filepath,
):
#CHECK ATTRIBUTE VALUES
pickle_out = open(filepath+'.pickle', 'wb')
pickle.dump(self, pickle_out)
pickle_out.close()

类似地,我想添加一个load方法,该方法加载一个pickle文件并用加载的属性更新对象。

在我的加载方法中,我使用了:

infile = open(filepath,'rb')
self = pickle.load(infile)
infile.close()

但是,这不会更新类属性。如何编写一个加载方法来更新类变量?

当不使用C扩展或插槽时,类实例数据存储在字典中。你可以解开这个类并替换那个字典。

import pickle
class Foo:
def __init__(self, val):
self.val = val
def save(self, filepath):
with open(filepath,'wb') as outfile:
pickle.dump(self, outfile)
def load(self, filepath):
with open(filepath,'rb') as infile:
self.__dict__ = pickle.load(infile).__dict__
f1 = Foo(1)
f1.save("test.pkl")
del f1
f2 = Foo(2)
print(f2.val)
f2.load("test.pkl")
print(f2.val)

仅pickleself.__dict__是有意义的,因为它是感兴趣的唯一数据。

与使用pickle的正常方式相比,我看不出这有任何好处——让正则函数或静态方法加载并返回pickle对象。这就是泡菜的用途。

相关内容

  • 没有找到相关文章

最新更新