Swapping superclass from a module
Terry Reedy
tjreedy at udel.edu
Sun May 17 02:08:01 EDT 2009
Steven D'Aprano wrote:
> On Sat, 16 May 2009 09:55:39 -0700, Emanuele D'Arrigo wrote:
>
>> Hi everybody,
>>
>> let's assume I have a module with loads of classes inheriting from one
>> class, from the same module, i.e.:
> [...]
>> Now, let's also assume that myFile.py cannot be changed or it's
>> impractical to do so. Is there a way to replace the SuperClass at
>> runtime, so that when I instantiate one of the subclasses NewSuperClass
>> is used instead of the original SuperClass provided by the first module
>> module?
>
> That's called "monkey patching" or "duck punching".
>
> http://en.wikipedia.org/wiki/Monkey_patch
>
> http://wiki.zope.org/zope2/MonkeyPatch
>
> http://everything2.com/title/monkey%2520patch
If the names of superclasses is resolved when classes are instantiated,
the patching is easy. If, as I would suspect, the names are resolved
when the classes are created, before the module becomes available to the
importing code, then much more careful and extensive patching would be
required, if it is even possible. (Objects in tuples cannot be
replaced, and some attributes are not writable.)
tjr
More information about the Python-list
mailing list