Question about unpickling dict subclass with custom __setstate__
gagsl-py2 at yahoo.com.ar
Fri Sep 11 10:40:51 CEST 2009
En Thu, 10 Sep 2009 20:09:34 -0300, Matthew Wilson <matt at tplus1.com>
> I subclassed the dict class and added a __setstate__ method because I
> want to add some extra steps when I unpickle these entities. This is a
> toy example of what I am doing:
> class Entity(dict):
> def __setstate__(self, d):
> Based on my experiments, the data in d *IS NOT* the data stored in my
> instances when I do stuff like:
> e = Entity()
> e['a'] = 1
> Instead, the stuff in d is the data stored when I do stuff like:
> e.fibityfoo = 99
Yes. The dict contents are pickled directly; __getstate__ and __setstate__
are related to the instance attributes (fibityfoo), not its contents
Try defining __reduce__ or __reduce_ex__ instead.
> Is there anything I have to do to make sure that my real dictionary data
> is correctly reloaded during the unpickle phase? In other words, should
> I run super(Entity, self).__setstate__(d) or something like that?
That doesn't work, dict.__setstate__ doesn't even exist.
More information about the Python-list