On Mon, 28 Mar 2005 03:57:16 GMT, Alex VanderWoude <[EMAIL PROTECTED]> wrote: >Is there a way to override a method on a class whose source you cannot > change in such a way that you can hook into that method's code? After doing > some research, it appears that one way to do such a thing is to create a new > (non-class) method, and then assign the new method to the class in question, > thus replacing the existing class method. However, I have read vague hints > in the documentation that this is not a good thing to do (?). Furthermore, > you probably need access to the source code of the method you are replacing > so that you can duplicate and modify it in your method. Now in this > particular case that is true, but what I really want to know is whether or > not there is an accepted Pythonic way to do this. > > Here's the situation. I'm using wxPython, and I want to make an enhancement > in the __init__ method of all the frame classes. The ideal place to do this > is in wxFrame.__init__, since any change there will automatically be > inherited by the other frame classes (for example, wxMDIParentFrame). > Obviously I can inherit from wxPython and make the changes in my subclass, > but then I would have to also subclass wxMDIParentFrame and duplicate my > enhancements there, and then use only my subclasses rather than the wx*** > classes. > > Basically I want to change wxFrame.__init__ so that it looks sort of like > this: > > def __init__(self, *args, **kwargs): > # Some enhancements here. > # The original code of this method, including the call to its > ancestor. > # Some more enhancements here. > > And then I can replace wxFrame's __init__ with my new version by assigning > it before any frames are instantiated.
from thirdparty.project import Something orig = Something.meth def new(x, y, z): foo() orig(x, y, z) bar() Something.meth = new HTH, Jp -- http://mail.python.org/mailman/listinfo/python-list