Now that is a clever little trick. I never would have guessed you can assign to __class__, Python always surprises me in it's sheer flexibility.
In this case it doesn't work. TypeError: __class__ assignment: only for heap types I suspect that's because this object begins its life in C code. The technique of using the __class__.__subclasses__ also fails: TypeError: cannot create 'B' instances This seems more complex than I thought. Can one do this for an object that beings it's life in C? Thanks, -Sandra Peter Otten wrote: > Sandra-24 wrote: > > > Can you create an instance of a subclass using an existing instance of > > the base class? > > > > Such things would be impossible in some languages or very difficult in > > others. I wonder if this can be done in python, without copying the > > base class instance, which in my case is a very expensive object. > > You can change the class of an instance by assigning to the __class__ > attribute. The new class doesn't even need to be a subclass of the old: > > >>> class A(object): > ... def __init__(self, name): > ... self.name = name > ... def show(self): print self.name > ... > >>> a = A("alpha") > >>> a.show() > alpha > >>> class B(object): > ... def show(self): print self.name.upper() > ... > >>> a.__class__ = B > >>> a.show() > ALPHA > > Peter -- http://mail.python.org/mailman/listinfo/python-list