我在Python2.7上使用pickle。我试图调用我重写的__getstate__
和{c
,因为它是类D
的一个实例。在
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__
退货:
^{pr2}$我看不到应该创建属性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)
从docs:
对于^{} :
因此,协议2必须明确设置为:
相关问题 更多 >
编程相关推荐