En Thu, 10 Sep 2009 20:09:34 -0300, Matthew Wilson <m...@tplus1.com> escribió:

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):

            log.debug("blah...")

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 (a->1).
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.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to