jython question: accessing protected superclass methods

Michael Vanier mvanier at endor.bbb.caltech.edu
Sun Mar 4 01:03:06 EST 2001


Hi,

So, I've been playing with jython for a few hours, and I'm *really*
impressed.  This is a kick-ass system for doing portable graphics
programming.

However, the online docs are a bit sparse, and one problem I've been having
is in trying to call a protected superclass method from a subclass which
overrides the method.  The offending superclass is javax.swing.JPanel.  I
have a subclass of this (let's call it MyJPanel) which needs to override the
protected paintComponent() method of JPanel.  The naive approach:

class MyJPanel:
    # ... lots of code ...

    def paintComponent(self, g):  # g == Graphics object
        JPanel.paintComponent(self, g)
        # extra code goes here

doesn't work, because paintComponent is not accessible from the MyJPanel
namespace.  The online jython docs say this:

    In Python, if I want to call the foo method in my superclass, I use the
    form:

        SuperClass.foo(self)

    This works with the majority of methods, but protected methods cannot be
    called from subclasses in this way.  Instead you have to use the
    "self.super_foo()" call style.

Well, I couldn't get this to work.  I'm not sure if the above statement means
that you're supposed to write (in my case) "self.super_paintComponent(g)" or
self.JPanel_paintComponent(g) but neither one works.  What is the magic
invocation?

Also, I was surprised to find that MyJPanel, just by subclassing JPanel, gets
its own public version of the protected JPanel methods!  So if I don't
override the method, I can call it directly.  I assume this is intentional,
but maybe the jython developers can comment.

Thanks,

Mike

--------------------------------------------------------------
Mike Vanier	mvanier at bbb.caltech.edu
Department of Computation and Neural Systems, Caltech 216-76



More information about the Python-list mailing list