2010-02-27 80 views

回答

5

有一個示例here可以解決您的問題__getstate____setstate__

+1

最快的手指第一:P – anijhaw 2010-02-27 02:15:20

+0

固定鏈接:http://docs.python.org/2/library/pickle.html#example – WGH 2016-07-22 15:35:38

26

一個處理不屬於picklable對象實例屬性的方法是使用特殊的方法可用於修改類實例的狀態:,有getstate()和setstate這()。下面是一個例子

class Foo(object): 

    def __init__(self, value, filename): 
     self.value = value 
     self.logfile = file(filename, 'w') 

    def __getstate__(self): 
     """Return state values to be pickled.""" 
     f = self.logfile 
     return (self.value, f.name, f.tell()) 

    def __setstate__(self, state): 
     """Restore state from the unpickled state values.""" 
     self.value, name, position = state 
     f = file(name, 'w') 
     f.seek(position) 
     self.logfile = f 

當富的一個實例是醃製,Python將醃製當它調用該實例的,有getstate()方法只返回的值給它。同樣,在取消打開時,Python將提供未取消的值作爲實例的setstate()方法的參數。在setstate()方法中,我們可以根據我們挑選的名稱和位置信息重新創建文件對象,並將文件對象分配給實例的日誌文件屬性。

參考:http://www.ibm.com/developerworks/library/l-pypers.html