2010-10-19 4 views
0

Я делаю deepcopy для класса I, который имеет несколько списков в качестве атрибутов. В одном списке это разрешимо, переопределяя getstate, чтобы вернуть этот список, и setstate, чтобы установить этот список, но setstate кажется неспособен принять несколько параметров.Как передать несколько аргументов __setstate__?

Как это делается?

ответ

0

Вы можете иметь __getstate__ возврат (и __setstate__ принимать) список списков, или 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 

Это просто демо. Вам действительно даже не нужно переоценивать поведение по умолчанию для рассола для простого случая, подобного этому.

+0

Ах, потрясающе! Не знал, что ты сможешь выложить эту страсть. Благодаря тонну – coffee

Смежные вопросы