Jeff Peery wrote: > hello, > > I have a question about the pickler. I'm using it to save objects in a > program of mine that I can later reload to use. I was wondering how the > pickle works and how it references the class module when I unpickle the > pickled objects. for example I save some objects using the pickler, then > I continue to develop my program so the class module is changed and > additional attributes and methods are added. What happens now when I > unpickle the pickled data and try to operate on it using the new methods > and new attributes?
The pickle docs suggest that the way to handle this is to write your own __setstate__() method and possibly to include a version number in the object or write one with a __getstate__() method. In your example, I think you could have something like this (not tested): def __setstate__(self, d): if 'name' not in d: d['name'] = 'bob' # some appropriate default for old pickles self.__dict__.update(d) Every time you change the class data, add a bit of conversion code to __setstate__(). If you just keep accreting converters to the end of __setstate__(), it will be able to upgrade any version of pickle. Kent PS Please don't start a new thread by replying to another thread, create a new message. Those of use who use threaded mail readers will appreciate it. PPS Mike Hansen please ignore the previous PS ;-) _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor