Kenny Li wrote: > Kent: > > I forgot to mention that no coping is allowed. Your two options > essentially are doing copying of the b.
Not really. I make new references to the attributes of b. It sounds like you want c = C(b) to actually convert b to be an instance of C, instead of creating a new object. Is that right? You can do that it C.__new__ but I wonder why you want to? Here is some code that might do what you want: ''' Construction of a derived class from a base class returns the base class converted to an instance of the derived class ''' class B(object): ''' the baseClass ''' def __init__(self, arg1, arg2): self.a1=arg1 self.a2=arg2 def __repr__(self): return 'B(%r, %r)' % (self.a1, self.a2) class C(B): ''' C is subClass of B ''' def __new__(cls, arg1, arg2=None): if isinstance(arg1, B): # If given a B instance, convert it to a C and return it arg1.__class__ = C return arg1 return B.__new__(cls, arg1, arg2) def __init__(self, arg1, arg2=None): if not isinstance(arg1, B): B.__init__(self, arg1, arg2) self.extra="blah blah blah" def __repr__(self): return 'C(%r, %r, %r)' % (self.a1, self.a2, self.extra) b=B(1, 2) print b c=C(2, 3) print c c=C(b) print c, (c is b) print b # b is now a C - it's the same object as c Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor