From: Updike, C. <Cla...@jh...> - 2004-05-18 12:54:50
|
For inner classes written in java, the jvm maintains a reference from the inner class instance to the outer class instance for you. Python doesn't do this AFAIK, but I don't see why you can't "roll your own": Jython 2.1 on java1.3.1_01 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> class A: ... _a = 0 ... class B: ... def __init__(self, outer): ... self.outer = outer # save ref to outer instance ... print 'in B' ... print self.outer._a ... ... def __init__(self): ... print 'in A' ... self.b = A.B(self) ... >>> a = A() in A in B 0 >>> Above, I'm simply creating the reference to the outer class instance by passing it in to the inner class constructor and saving it as 'outer'. -Clark -----Original Message----- From: Jingzhao Ou Sent: Tuesday, May 18, 2004 2:28 AM To: jyt...@li... Subject: [Jython-users] Accessing the attributes of the outer class Hi, I have the following Jython code. Class A contains an inner class B. When I try to get access the attribute "_a" of outer class A from inner class B, I get a NameError error. I know that defining the constructor of inner class B as "def __init__(self, outer)" should work. However, I wonder there is any better solution to this problem. Thanks a lot! Beat regards, Jingzhao ========================================================= class A: _a = 0 class B: def __init__(self): print 'in B' print _a def __init__(self): print 'in A' self.b = A.B() ------------------------------------------------------- |
From: Jingzhao Ou <ja...@ya...> - 2004-05-18 18:59:24
|
Dear Clark and Diez, Thanks a lot for your replies. They help me to understand this issue. These days, I use Java a lot. So, I miss many good features of Java. I just want to see how close Jython and Java can be with each other. I find out that for writing Java programs in a scripting language, BeanShell seems to be easier than Jython. However, considering Jython's flexible data types such as list, tuple, etc., I finally decided to use Jython as the scripting language for my project. Please point out if I miss something. Thanks a lot! Best regards, Jingzhao --- "Updike, Clark" <Cla...@jh...> wrote: |
From: Diez B. R. <de...@we...> - 2004-05-19 17:11:01
|
Am Dienstag, 18. Mai 2004 20:59 schrieb Jingzhao Ou: > Thanks a lot for your replies. They help me to understand this issue. These > days, I use Java a lot. So, I miss many good features of Java. I just want > to see how close Jython and Java can be with each other. > I find out that for writing Java programs in a scripting language, > BeanShell seems to be easier than Jython. However, considering Jython's > flexible data types such as list, tuple, etc., I finally decided to use > Jython as the scripting language for my project. > > Please point out if I miss something. Thanks a lot! does java have good features? Ok, just kidding. But I personally prefer python over java anytime I can. Its a matter of taste, of course. What you for example call a good feature in java (inner classes) is a poor hack from my point of view. They allow a sort of closure and are usually used to implement callbacks or mimic multiple inheritance- see event listeners and the like. now python OTH treats functions as first class citizens and allows for multiple inheritance, so that such things can be implemented much easier than in java. Once you wrapped your head about them, its much more fun/elegant using them, at least IMHO. Other features of java simply annoy me - e.g. checked exceptions suck big time. And the uneccessary casting all the time. As you pointed out, beanshell gets rid of exactly these annoyances, so using it is more fun. And jython lifts that to another level, where also collections are first-class and the like. So its even better than beanshell :) Regards, Diez |