如何向__setstate__传递多个参数?

0 投票
1 回答
573 浏览
提问于 2025-04-16 05:42

我正在对我设计的一个类进行深拷贝,这个类有多个列表作为它的属性。对于单个列表,我可以通过重写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 行为。

撰写回答