1
我用鹹菜的Python 2.7版。我正在嘗試調用我忽略的方法__getstate__
和__getnewargs__
。我不能鹹菜屬性c
,因爲它是CLASSE D
的實例。味酸:同時使用__getstate__和__getnewargs__
nn = C(7, 2)
nn.d = 1
pickle.dump(nn, open('c_save.p', 'wb'))
nn2 = pickle.load(open('c_save.p', 'rb'))
print nn2.__dict__
返回:
getstate was called
setstate was called
{'a': 7, 'b': 2, 'd': 1}
我看沒有哪個有前人的精力創建的屬性c
__getnewargs__
電話。
我的代碼:
import pickle
class D(object):
def __init__(self, i, j):
self.i = i
self.j = j
class C(object):
def __init__(self, a, b):
self.a = a
self.b = b
self.c = D(a, b)
self.d = 0
def __getstate__(self):
print 'getstate was called'
odict = self.__dict__.copy()
del odict['c']
return odict
def __getnewargs__(self):
print 'getnewargs was called'
return (self.b,self.a)
def __setstate__(self, dict):
print 'setstate was called'
self.__dict__.update(dict)
謝謝!完美的作品。它如預期般返回 'getnewargs被稱爲' 'getstate被稱爲' 'setstate被稱爲' '{'a':7,'c':<__ main __。D object at 0x7fd1bd8c1710>,'b':2, 'd':1}' – JulesKzl