Invoking a subclass's method on its superclass's instance
Rick Lee
rwklee at home.com
Sun Sep 24 21:52:26 EDT 2000
I like to be able to invoke a subclass's method on an instance of its
superclass, also this method makes changes to the instance's data.
So far, I found these two methods that seem to work:
Method 1, changing superclass instance's __class__ to subclass:
>>> x = superclass()
>>> x.__class__ = subclass
>>> x.method() # this executes method defined in subclass
Method 2, creating a subclass instance, and change its __dict__ to
reference superclass instance's:
>>> x = superclass()
>>> y = subclass ()
>>> y.__dict__ = x.__dict__
>>> y.method () # since y.__dict__ refers to x's data, x's data gets
changed by method
Are these two methods totally equivalent? Are there any gotcha's? Is
there a more elegant way?
Note, the following did not work, resulting with the TypeError below:
>>> x = superclass()
>>> subclass.method (x)
TypeError: unbound method must be called with class instance 1st
argument
(The error message is somewhat misleading.)
By the way, I am using Python 1.5.2, Mac version.
- Rick Lee
More information about the Python-list
mailing list