While a dirty hack for which I'd tend to smack anybody who used
it...you *can* assign to instance.__class__
>>> class A:
... def __init__(self, name):
... self.name = name
... def __str__(self): return self.name
...
>>> class B(A):
... def foo(self): print "I'm B: %r" % self.name
...
>>> class C(A):
... def foo(self): print "I'm C: %r" % self.name
...
>>> a = A("Alpha")
>>> print a
Alpha
>>> a.__class__
<class __main__.A at 0xb752d6bc>
>>> a.__class__ = B
>>> a.foo()
I'm B: 'Alpha'
>>> a.__class__ = C
>>> a.foo()
I'm C: 'Alpha'
If it breaks you get to keep all the parts :)
-tkc
--
http://mail.python.org/mailman/listinfo/python-list