Tutorials - Classes and Objects, #1
Java プログラマーのための Python 導入ガイド《Jython2.5》
Tutorials - Classes and Objects, #1
■ 概要
Java で作成したモジュールに、Jython から自由にアクセスできると便利です。
Java で作成したモジュールを、Jython の世界から覗くと、新たな可能性が広がります。Jython を対話モードで起動すると、あたかも Java のインタープリターのように利用できます。JavaBeans に準拠したクラスを利用するときには、Jython では洗練された簡潔な表現が可能になります。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
Jython から Java の世界を眺める
■ 事例:クラス Point
The Java™ Tutorials では、次の事例 Point.java を紹介しています。
public class Point { public int x = 0; public int y = 0; // a constructor! public Point(int a, int b) { x = a; y = b; } }
クラス Point は(平面上にある)点の座標 (x,y) を表現したものです。2つのインスタンス属性 x/y を持つとともに、1つのコンストラクター Point を規定しています。
$ javac Point.java $ ls Point.class Point.java
まず、事前の準備として、ソースモジュール .java をコンパイル javac して、クラスモジュール .class を作成しておきます。すると、プログラミング言語の違いを越えて(.class を介して)相互に情報をやり取りできます。ここでは、Jython から Java の世界を眺めます。
■ 対話モード:Java で作成したモジュールを取り込む
Jython を対話モードで起動すると、あたかも Java のインタープリターのように利用できます。
$ jython2.5b3 Jython 2.5b3 (Release_2_5beta3:6092, Mar 10 2009, 15:34:57) [Java HotSpot(TM) Client VM (Apple Inc.)] on java1.5.0_13 Type "help", "copyright", "credits" or "license" for more information. >>> import Point
Java で作成したモジュールを取り込むには、import 文を利用します。すると、Java で作成したクラス Point を、Jython の世界でも扱えるようになります。
クラス特性
■ 組み込み関数:dir
現在の環境で有効な情報(対話モードで参照できる名前)のリストを得るには、組み込み関数 dir を利用します。
>>> dir() ['Point', '__doc__', '__name__']
すると、得られたリストの中に、クラス Point が含まれるのが分かります。さらに、
>>> dir(Point) ['__class__', '__delattr__', '__doc__', '__eq__', '__getattribute__', '__hash__', '__init__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'class', 'equals', 'getClass', 'hashCode', 'notify', 'notifyAll', 'toString', 'wait', 'x', 'y']
関数 dir の引数にクラス Point を指定すると、そのクラス特性のリストが得られます。すると、得られたリストの中に、インスタンス属性 x/y などが含まれるのが分かります。
■ 特殊属性:__dict__
Point に固有の特性をより詳細に知りたいなら、特殊属性 __dict__ を参照します。
>>> for k,v in Point.__dict__.items(): ... print k,v ... x <reflected field public int Point.x 0x1> y <reflected field public int Point.y 0x2> __init__ <java constructor _new_impl 0x3>
公開されたフィールド x/y のほかに、コンストラクターを確認できます。ただし、その名前は、Point ではなく、__init__ になっています。
Tips
》作業中です《