serialization and versioning
dieter at handshake.de
Sat Oct 13 08:23:14 CEST 2012
Neal Becker <ndbecker2 at gmail.com> writes:
> I wonder if there is a recommended approach to handle this issue.
> Suppose objects of a class C are serialized using python standard pickling.
> Later, suppose class C is changed, perhaps by adding a data member and a new
> constructor argument.
> It would see the pickling protocol does not directly provide for this - but is
> there a recommended method?
> I could imagine that a class could include a class __version__ property that
> might be useful - although I would further expect that it would not have been
> defined in the original version of class C (but only as an afterthought when it
> became necessary).
The ZODB (Zope Object DataBase) is based on Python's pickle.
In the ZODB world, the following strategy is used:
* if the class adds a new data attribute, give it (in addition) a
corresponding class level attribute acting as "default" value
in case the pickled state of an instance lacks this
instance level attribute
* for more difficult cases, define an appropriate "__getstate__"
for the class that handles the necessary model upgrades
More information about the Python-list