《Jython2.5》Tutorials - Classes and Objects, #5

Java プログラマーのための Python 導入ガイド記事一覧
Tutorials - Classes and Objects, #5

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第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 で再構成しました。

Java で作成したモジュールに、Jython から自由にアクセスできる機能があると便利です。

■ 関連記事

》作業中です《

クラス特性

■ 特殊属性 __dict__

Rectangle に固有の特性をより詳細に知りたいなら、特殊属性 __dict__ を参照します。

>>> c = Rectangle.__dict__['__init__']
>>> c.printArgs()
nargs: 4
class Rectangle, true, 0, public Rectangle()
	()
class Rectangle, true, 0, public Rectangle(Point)
	(Point, )
class Rectangle, true, 0, public Rectangle(int,int)
	(int, int, )
class Rectangle, true, 0, public Rectangle(Point,int,int)
	(Point, int, int, )

メソッド printArgs を利用すると、多重定義された4つのコンストラクターの詳細な情報が得られます。

インスタンスを生成する

新たなインスタンスを生成するには、クラス Rectangle に続いて任意の引数を与えます。

>>> r1 = Rectangle()
>>> r1
Rectangle@b970f5
>>> r = r1; r.origin.x, r.origin.y, r.width, r.height
(0, 0, 0, 0)

引数を省略すると、Rectangle(Point(0,0),0,0)) と同じ結果が得られます。

>>> r2 = Rectangle(Point(3,4))
>>> r2
Rectangle@9a8d9b
>>> r = r2; r.origin.x, r.origin.y, r.width, r.height      
(3, 4, 0, 0)

第1引数には、クラス Point のインスタンスを与えます。すると、Rectangle(Point(3,4),0,0)) と同じ結果が得られます。

>>> r3 = Rectangle(5,6)
>>> r3
Rectangle@2a3945
>>> r = r3; r.origin.x, r.origin.y, r.width, r.height
(0, 0, 5, 6)

第1/第2引数には、幅/高さを与えます。すると、Rectangle(Point(0,0),5,6)) と同じ結果が得られます。

>>> r4 = Rectangle(Point(3,4),5,6)
>>> r4
Rectangle@90b38d
>>> r = r4; r.origin.x, r.origin.y, r.width, r.height
(3, 4, 5, 6)

第1引数には、クラス Point のインスタンスを与えます。第2/第3引数には、幅/高さを与えます。

コンストラクターの引数

不適切な引数を与えると、実行時に例外を生成します。

>>> Rectangle(1)               
Traceback (most recent call last):
  File "", line 1, in 
TypeError: _new_impl(): 1st arg can't be coerced to Point 

第1引数に整数値を与えると、例外 TypeError を生成するとともに、エラーメッセージを出力します。ここで

1st arg can't be coerced to Point 

とあるのは、第1引数から Point は得られない(int を Point には変換できない)ことを意味します。

>>> Rectangle(1,Point(2,3))    
Traceback (most recent call last):
  File "", line 1, in 
TypeError: _new_impl(): 2nd arg can't be coerced to int
>>> 

第2引数に Point インスタンスを与えると、例外 TypeError を生成するとともに、エラーメッセージを出力します。ここで

2nd arg can't be coerced to int 

とあるのは、第2引数から int は得られない(Point を int には変換できない)ことを意味します。

>>> for e in [
... 	Rectangle(),
... 	Rectangle(Point(3,4)),
... 	Rectangle(5,6),
... 	Rectangle(Point(3,4),5,6),
... ]:
... 	print (e.origin.x, e.origin.y, e.width, e.height)
... 
(0, 0, 0, 0)
(3, 4, 0, 0)
(0, 0, 5, 6)
(3, 4, 5, 6)
>>> Rectangle(5,6,Point(3,4))                   
Traceback (most recent call last):
  File "", line 1, in 
TypeError: _new_impl(): 1st arg can't be coerced to Point
>>> 

Tips

》作業中です《

Last updated♪09/05/30