Hi, One powerful feature of Python is the ease of reloading modules. This makes debugging extremely nice, since you can modify the code, reload the module, and all this while the main program is still running. Moreover, if a particular instance object has been created, you can actually edit the object's class code, reload the module, and change the class of the object to the modified class. Something like: my_module = sys.modules['module_name'] reload(my_module) my_new_class = my_module.my_class my_instance.__class__ = my_new_class This works all very nicely in pure Python. But not in Zope. When the object is a Zope object, somehow the last statement does not seem to do anything. That is, the object's class is not updated. I don't know what exactly is going on. My conjectures are: (1) Digicool people have re-written Python's system function setattr(), so that when it is an Z Object, the __class__ cannot be changed. (2) Caching: when I change the class of a Z Object, somehow it does not reflected in the Z Object's memory-cached version. At any rate, this is really surprising. Since usually when you do: x = 3 print x you would expect the result to be 3. But with a Z object's __class__, you can assign it to something, and then nothing happens. That is: x.__class__ = new_class print x.__class__ and it will print the old class, not the new class. Does anyone know what I can do to change the class of a Z object dynamically? This will make the development of Zope products a lot easier. (Of course, all these reloading features are extremely dangerous, so it's best to use them only for development and strip them from the code at the end.) regards, Hung Jung ________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com