Subclassing by monkey-patching

Arnaud Delobelle arnodel at googlemail.com
Sun Sep 5 09:23:42 CEST 2010


Jason <jason.heeris at gmail.com> writes:
[...]
> Is there a way I can write the subclass but then somehow... extend an
> existing instance all at once rather than monkeypatch methods on one
> by one? So I could take an existing instance of a FileMonitor and make
> it an instance of my subclass? This would even allow me to override
> the gio.File.monitor_directory() method to take the monitor returned
> by the original method and decide whether to make it recursive based
> on a parameter passed to monitor_directory().

There is a straightforward way:

>>> class A(object):
...     def __init__(self, x):
...         self.x = x
... 
>>> class B(A):
...     def x2(self):
...         return self.x**2
... 
>>> a = A(42)       # Create an instance of A
>>> a.__class__ = B # Change its class to B
>>> a.x2()
1764

However, I've never really tried it so I don't know what ways it could
break.

HTH

-- 
Arnaud




More information about the Python-list mailing list