我正在嘗試使用pickle來保存自定義類;非常類似於下面的代碼(儘管在類中定義了一些方法,還有幾個字符等用於數據)。然而,經常當我運行這個,pickle然後unpickle時,我失去了類中的所有數據,並且就好像我創建了一個新的空白實例。Unpickle有時會產生空白對象
import pickle
class MyClass:
VERSION = 1
some_data = {}
more_data = set()
def save(self,filename):
with open(filename, 'wb') as f:
p = pickle.Pickler(f)
p.dump(self)
def load(filename):
with open(filename,'rb') as ifile:
u = pickle.Unpickler(ifile)
obj = u.load()
return obj
我想知道這是否與鹹菜類的備忘錄有關,但我不覺得它應該。當它不工作,我看我生成的文件,它看起來是這樣的:(顯然並不意味着是可讀的,但它顯然不包含任何數據)
€c__main__ MyClass q
不管怎麼說,我希望這是足夠的有人瞭解這裏可能會發生什麼,或者看什麼。
你是否在'pickle.dumps'和'pickle.loads'之間改變你的代碼?因爲,我認爲pickle協議不會對代碼更改產生影響。 –
你的課應該實現[pickle protocol](http://docs.python.org/2/library/pickle.html#pickle-protocol),以確保它能夠像你期望的那樣工作。 – Wessie
你是否將實例的數據保存在'some_data'和'more_data'類變量中?那些不會被'pickle'保存,因爲它們不是實例本身的一部分。您應該使用'__init__'方法創建它們,而不是將它們保存在類中。 – Blckknght