serialization and versioning

Dieter Maurer dieter at handshake.de
Sat Oct 13 02:23:14 EDT 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 mailing list