From: Andres Corrada-E. <co...@to...> - 2001-10-25 14:14:01
|
On Wed, 24 Oct 2001, Robert W. Bill wrote: > > Is the stringArrayInitializedInSuperMethodCalledBefore a protected field? > or public? > > Just curious because field access does not go through the proxy making > protected fields == private. > stringArrayInitializedInSuperMethodCalledBefore is defined as "package private". I have run jythonc with the --package option set to the super's package and confirmed that the package statement is correct in the generated .java file. The error still occurs nonetheless: I cannot access super class attributes in my Python code (which in turn is converted into a .class file). |
From: Andres Corrada-E. <co...@ci...> - 2001-10-25 17:45:38
|
Hello, I have simplified my problem of accessing super class attributes to the following simple files-- Java super class: public class Foo { String outputTags; public Foo() { outputTags = new String("This is the Foo string!"); } } Python class that subclasses this Foo java class: import Foo class Bar(Foo): def __init__( self ): "Do nothing since jythonc will call Foo's constructor." pass def testAttributeCall( self ): "@sig public java.lang.String testAttributeCall()" return self.outputTags Java file to test jythonc's creation of Bar.class: import Bar; class TestAttribute { public static void main(String args[]){ Bar myBar = new Bar(); System.out.println( myBar.testAttributeCall() ); } } This fails with: AttributeError: instance of 'Bar' has no attribute 'outputTags'. The problem is also present if the Bar.py file is used (with an added Foo.__init__(self) call) from within Jython. So the question remains, how does one call super class attributes to avoid the AttributeError? Andres Corrada-Emmanuel Senior Research Fellow Center for Intelligent Information Retrieval University of Massachusetts, Amherst |
From: Andres Corrada-E. <co...@ci...> - 2001-10-25 18:28:52
|
Hi Robert, The files I'm using can be seen at: http://aspn.activestate.com/ASPN/Mail/Message/Jython-users/819819 I've gone further and confirmed that if my Foo.java code makes the attribute public, everything works fine. This seems to contradict the Java transparency claim for Jython also: -I can write Java classes that use Foo.java and they can access Foo's attributes without having to make those attributes public. -A python class can only access explicitly public attributes. On Thu, 25 Oct 2001, Robert W. Bill wrote: > > Is this the random postings from a while back, or something new > I'm not seeing yet? I actually have a few minutes to take a good > look this afternoon rather than the guesses sent so for :) If you > could point me to these simple files it would help. > > Tnx, > Robert The problem with calling java.util.Random's initializer was solved by a posting made by Finn. This thread is about my next step: getting a Python class to access package variables. To simplify the problem, I have come up with the simple files shown in the URL above. Thanks for your help on this. Andres Corrada-Emmanuel Senior Research Fellow Center for Intelligent Information Retrieval University of Massachusetts, Amherst |
From: Robert W. B. <rb...@di...> - 2001-10-25 20:33:38
|
On Thu, 25 Oct 2001, Andres Corrada-Emmanuel wrote: > ... > I've gone further and confirmed that if my Foo.java code makes the > attribute public, everything works fine. This seems to contradict the > Java transparency claim for Jython also: I think setting python.respectJavaAccessibility to false convinces even the most reluctant to believe in transparency <g> -robert |
From: Robert W. B. <rb...@di...> - 2001-10-25 17:34:46
|
Hi Andres, On Thu, 25 Oct 2001, Andres Corrada-Emmanuel wrote: > On Wed, 24 Oct 2001, Robert W. Bill wrote: > > Is the stringArrayInitializedInSuperMethodCalledBefore a protected field? > > or public? > > > > Just curious because field access does not go through the proxy making > > protected fields == private. > > stringArrayInitializedInSuperMethodCalledBefore is defined as "package > private". I have run jythonc with the --package option set to the super's > package and confirmed that the package statement is correct in the > generated .java file. The error still occurs nonetheless: I cannot access > super class attributes in my Python code (which in turn is converted into > a .class file). IIRC Jython's indirection causes the actual call in this case to originate from the org.python.core package. Methods go through the proxy to act like the real package/subclass, but fields do not. In other words, your stringArray needs to be public, or you need to write an intermediate/shell java class that exposes this field (e.g. a get method). -Robert |
From: Andres Corrada-E. <co...@ci...> - 2001-10-25 17:52:46
|
On Thu, 25 Oct 2001, Robert W. Bill wrote: > Hi Andres, > > . > . > . > IIRC Jython's indirection causes the actual call in this case to originate > from the org.python.core package. Methods go through the proxy to act like > the real package/subclass, but fields do not. In other words, your > stringArray needs to be public, or you need to write an intermediate/shell > java class that exposes this field (e.g. a get method). > Hi Robert, I've managed to recreate the problem with simple files that I sent in a previous posting. It seems that the problem is worse, one cannot access super class attributes even if one just uses Jython. This seems to contradict the claim that Jython allows you to use Java classes transparently so I think I must be missing the correct syntax to do the work. Andres Corrada-Emmanuel |