我有一個類,其中該方法save使用 pickle 包將創建的物件存盤到磁盤:
def save(
self,
filepath,
):
#CHECK ATTRIBUTE VALUES
pickle_out = open(filepath '.pickle', 'wb')
pickle.dump(self, pickle_out)
pickle_out.close()
同樣,我想添加一個load加載腌制檔案并使用加載的屬性更新物件的方法。
在我的加載方法中,我使用了:
infile = open(filepath,'rb')
self = pickle.load(infile)
infile.close()
但是,這不會更新類屬性。如何撰寫更新類變數的加載方法?
uj5u.com熱心網友回復:
當不使用 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)
self.__dict__僅僅因為這是感興趣的唯一資料,所以腌制才有意義。
我認為這與使用 pickle 的正常方式相比沒有任何好處 - 加載常規函式或靜態方法并回傳腌制物件。這就是泡菜的預期用途。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520880.html
標籤:Python班级目的泡菜
