2 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個贊
這不起作用的原因是因?yàn)槟悴荒芊峙浣o self (或者更確切地說:這樣做并沒有做你認(rèn)為它做的事情)。如果您有興趣了解實(shí)際發(fā)生的情況,請嘗試為 分配一些奇怪的東西self,例如self = "foobar"(行為將保持不變)。
制作deserialize一個類方法并將其用作“構(gòu)造函數(shù)”:
@classmethod
def deserialize(cls, filename):
"""Simple object deserialization given a filename"""
with open(filename, 'rb') as f:
obj = pickle.load(f)
print("Deserialized value inside deserialize function: %d" % (obj.x))
return obj
然后像這樣使用它:
a2 = A.deserialize('a.pkl')
輸出:
序列化值:2
反序列化函數(shù)內(nèi)部反序列
化值:2 外部反序列化值:2

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個贊
回復(fù)晚了非常抱歉。Pickle 將對象扁平化為字典。這是修復(fù)它的方法:
def serialize(self, filename):
"""Simple object serialization given a filename"""
with open(filename, 'wb') as f:
pickle.dump(self.__dict__, f)
print("Serialized with value of: %d" % (self.x))
def deserialize(self, filename):
"""Simple object deserialization given a filename"""
with open(filename, 'rb') as f:
print("self.x before load (inside deserialize): %d" % (self.x))
self.__dict__ = pickle.load(f)
print("Deserialized value inside deserialize function: %d" % (self.x))
添加回答
舉報(bào)