Overriding methods in classes you don't control
Amaury Forgeot d'Arc
afa.NOSPAM at neuf.fr
Tue Mar 29 21:20:21 EST 2005
Alex VanderWoude a écrit :
> 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.
Sorry, but this won't work with wxPython.
wxPython classes are just wrappers around C++ classes.
You may well replace wxFrame.__init__ with your own method, but it won't
be called by wxMDIParentFrame: wxMDIParentFrame.__init__ directly calls
the C++ constructor, completely ignoring wxFrame.__init__.
The call to the superclass' constructor is done in C++.
Since replacing C++ method is much more difficult (if possible at all),
I'm afraid you will have to do the replacement you plan for every
derived class.
Amaury.
More information about the Python-list
mailing list