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