Tutorials - Classes and Objects, #1

前の記事記事一覧次の記事

Java プログラマーのための Python 導入ガイド《Jython2.5》
Tutorials - Classes and Objects, #1

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03

■ 概要

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

》作業中です《

Last updated♪09/06/12