Miles Waller wrote at 2006-6-12 16:58 +0100:
>Does anyone have a good approach to changing the class of an object 
>already stored in the ZODB?

This is *very* difficult.


The main problem is that the class is usually coded (for efficiency
reasons) in the
persistent references to an object. As soon as the container
is loaded from the ZODB, a ghost is created for its persistent
reference using the class mentioned there.

This means: it is not safe to change the class of a persistent object
  unless you although modify all its containers (otherwise, some
  persistent references remain with the old class. This potentially
  leads to non-deterministic behaviour).


I usually solve you problem with proxy classes:


  When I want to refactor something, I do, but
  leave at the old place something like:

        from NewPlace import NewClass as OldClass



-- 
Dieter
_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to