Max M wrote at 2004-5-13 09:30 +0200:
I have a bunch of objects in the ZODB that I need to convert to other objects.
The new object have the same meta_type and the same attributes. But they are of a new class.
So I thought that I could simply assign a new class.
I tried assigning the new class to __class__ but that didn't work. Like::
obj.__class__ = SomeNewClass
I suspect that is because I am assigning it to an aquisition wrapper. But I am not shure.
Would I need to do something like?
base = obj.aq_base base.__class__ = SomeNewClass
It will not work. For efficiency reasons, the class is not coded only in the object itself but also in references to the object. When an object is loaded, it is (usually) loaded via a reference and this reference determines the class. Thus, you must not only change the object's class. You must also change all references to the object. Probably, you must also tell the object that is has been modified. -- Dieter