《Jython2.5》Tutorials - Classes and Objects, #4
Java プログラマーのための Python 導入ガイド《記事一覧》
Tutorials - Classes and Objects, #4
■ 概要
Java で記述したクラスに対して、Jython は便利な機能を提供します。
Java で作成したモジュールを、Jython の世界から覗くと、新たな可能性が広がります。 Jython を対話モードで起動すると、あたかも Java のインタープリターのように利用できます。 JavaBeans に準拠したクラスを利用するときに、Jython では洗練された表現が可能になります。 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事
- The Java™ Tutorials, Classes and Objects, Objects ¶
Jython から Java の世界を眺める
■ 事例:クラス Rectangle
The Java™ Tutorials では、次の事例 Rectangle.java を紹介しています。
public class Rectangle { public int width = 0; public int height = 0; public Point origin; // four constructors public Rectangle() { origin = new Point(0, 0); } public Rectangle(Point p) { origin = p; } public Rectangle(int w, int h) { origin = new Point(0, 0); width = w; height = h; } public Rectangle(Point p, int w, int h) { origin = p; width = w; height = h; } // a method for moving the rectangle public void move(int x, int y) { origin.x = x; origin.y = y; } // a method for computing the area of the rectangle public int getArea() { return width * height; } }
クラス Rectangle は(平面上にある)矩形領域(長方形)を表現したものです。3つのインスタンス属性 width/height/origin を持つとともに、4つのコンストラクター Rectangle と、2つのメソッド move/getArea を規定しています。
$ javac Rectangle.java $ ls Point.class Point.java Rectangle.class Rectangle.java
まず、事前の準備として、ソースモジュール .java をコンパイル javac して、クラスモジュール .class を作成しておきます。すると(ソースコードを記述した)言語 Java/Jython の違いに依らず(.class を介して)相互に情報をやり取りできます。ここでは、Jython から、Java の世界を眺めてみます。
クラス特性
■ 組み込み関数 dir
$ jython2.5b3 >>> import Point >>> dir() ['Point', '__doc__', '__name__'] >>> import Rectangle >>> dir() ['Point', 'Rectangle', '__doc__', '__name__']
import 文を使って、各モジュール(Point.class/Rectangle.class)を取り込むと、Jython の世界から、Java で作成したクラス Point/Rectangle を扱えるようになります。組み込み関数 dir を使って、対話モードで参照できる名前の中に、クラス Point/Rectangle が含まれるのが分かります。
■ 特殊属性 __dict__
Rectangle に固有の特性をより詳細に知りたいなら、特殊属性 __dict__ を参照します。
>>> for k,v in Rectangle.__dict__.items(): ... print k,v ... area <beanProperty area type: int 0x1> height <reflected field public int Rectangle.height 0x2> width <reflected field public int Rectangle.width 0x3> move <java function move 0x4> getArea <java function getArea 0x5> __init__ <java constructor _new_impl 0x6> origin <reflected field public Point Rectangle.origin 0x7>
公開されたフィールド height/width/origin のほかに、コンストラクターを確認できます。ただし、その名前は、Rectangle ではなく、__init__ になっています。また、メソッド関数 move/getArea のほかに、bean 特性として area が規定されているのが分かります。
Tips
》作業中です《