[Tutor] Transforming object into subclass instance

Kent Johnson kent37 at tds.net
Sun Oct 30 19:21:27 CET 2005


Jan Eden wrote:
> Now my question is: How can I turn an object of class X into an
> object of either class Y or Z while (retaining all the attributes
> defined so far).

This is easy, in fact - you can change the class of an instance by assigning to its __class__ attribute:
 >>> class F(object):
 ...   def p(self): print "F"
 ...
 >>> class G(object):
 ...   def p(self): print "G"
 ...
 >>> f=F()
 >>> f.p()
F
 >>> type(f)
<class '__main__.F'>
 >>> f.__class__ = G
 >>> f.p()
G
 >>> type(f)
<class '__main__.G'>
> 
> I know I could solve the problem by using another switch statement -
> but is there consistent OOP solution for this problem?

I'm not sure I would call this solution OO or pretty but it does work.

Kent
-- 
http://www.kentsjohnson.com



More information about the Tutor mailing list