2 cls.__new__(cls, *args), . __reduce__, , __new__. , **kwargs :
import cPickle
class Blubb(object):
def __init__(self, value, foo=None, bar=None):
self.value = value
self.foo = foo
self.bar = bar
def _new_Bla(cls, value, kw):
"A function to map kwargs into cls.__new__"
return cls.__new__(cls, value, **kw)
class Bla(Blubb):
def __new__(cls, value, **kw):
instance = super(Bla, cls).__new__(cls)
instance.__init__(value, **kw)
return instance
def __reduce__(self):
kwargs = {'foo': self.foo, 'bar': self.bar}
return _new_Bla, (self.__class__, self.value, kwargs), None
x = Bla(2, bar=[1, 2, 3])
pickled = cPickle.dumps(x, 2)
y = cPickle.loads(pickled)
assert y.value == 2
assert y.bar == [1, 2, 3]