2014-10-16 1 views
2

В заявлении pickle documentation указано, что «когда экземпляры экземпляров маринуются, данные их класса не травятся вместе с ними. Только данные экземпляра маринуются». Может ли кто-либо предоставить рецепт включения переменных класса, а также переменных экземпляра при травлении и рассыпке?Солить как переменные класса, так и переменные экземпляра?

ответ

3

Использовать dill вместо рассола и код точно как вы, вероятно, уже сделали.

>>> class A(object): 
... y = 1 
... x = 0 
... def __call__(self, x): 
...  self.x = x 
...  return self.x + self.y 
... 
>>> b = A() 
>>> b.y = 4 
>>> b(2) 
6 
>>> b.z = 5 
>>> import dill 
>>> _b = dill.dumps(b) 
>>> b_ = dill.loads(_b) 
>>> 
>>> b_.z 
5 
>>> b_.x 
2 
>>> b_.y 
4 
>>> 
>>> A.y = 100 
>>> c = A() 
>>> _c = dill.dumps(c) 
>>> c_ = dill.loads(_c) 
>>> c_.y 
100 
+0

Это похоже на отличное решение, спасибо! Я подниму вас, как только смогу. – rmodrak

+0

Мне любопытно, может ли кто-нибудь предоставить альтернативное решение, используя только стандартные функции библиотеки? – rmodrak

+0

Да, 'dill' просто использует' copy_reg', 'save_reduce' и' save_global' под обложками, так что вы могли бы сделать то же самое ... было бы больше работать с вашей стороны. –

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