Neal Becker <ndbeck...@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 -- http://mail.python.org/mailman/listinfo/python-list