《Jython2.5》Tutorials - Classes and Objects, #5
Java プログラマーのための Python 導入ガイド《記事一覧》
Tutorials - Classes and Objects, #5
■ 概要
Java で記述したクラスに対して、Jython は便利な機能を提供します。
Java で作成したモジュールを、Jython の世界から覗くと、新たな可能性が広がります。 Jython を対話モードで起動すると、あたかも Java のインタープリターのように利用できます。 JavaBeans に準拠したクラスを利用するときに、Jython では洗練された表現が可能になります。 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
クラス特性
■ 特殊属性 __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
》作業中です《