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.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to