如何向__setstate__传递多个参数?
我正在对我设计的一个类进行深拷贝,这个类有多个列表作为它的属性。对于单个列表,我可以通过重写getstate方法来返回这个列表,重写setstate方法来设置这个列表,但setstate似乎不能接受多个参数。
那么,应该怎么做呢?
1 个回答
0
你可以让 __getstate__
返回一个列表的列表,或者一个 dict
(如果你实现了 __getstate__
和 __setstate__
,那么 __getstate__
不一定要返回 dict
)。
import pickle
class Example:
def __init__(self):
self.list1 = [1]
self.list2 = [2]
def __getstate__(self):
return {'list1': self.list1, 'list2': self.list2}
def __setstate__(self, state):
self.list1 = state['list1']
self.list2 = state['list2']
ex = Example()
s = pickle.dumps(ex)
ex2 = pickle.loads(s)
print ex.list1, ex.list2
这只是个演示。其实对于像这样的简单情况,你根本不需要去修改默认的 pickle 行为。