■
インスタンスを生成する
>>> p = Point(3,4)
新たなインスタンス p を生成するには、クラス Point に続いて引数 (3,4) を与えます。
《Note》コンストラクター:Java と違って、冗長な new は必要ありません。Jython では、クラス/インスタンスをともにオブジェクトと見なす「統一した概念モデル」に従います。慣例として「コンストラクター」と呼ぶだけで、他の関数と本質的に同じものです。原則として「インスタンス」オブジェクトを指定できる同じ場所には、任意の「クラス」オブジェクトを指定できます。そのため、他の呼び出し可能オブジェクトと同様に、「クラス」オブジェクトにも演算子 () を適用できます。Java のように特別な(コンストラクターに固有の)構文規則を必要としないので、統一された簡潔な表現が可能です。■
■ コンストラクターの引数
>>> Point() Traceback (most recent call last): File "", line 1, in TypeError: _new_impl(): expected 2 args; got 0 >>>
引数を省略すると、例外 TypeError を生成するとともに、エラーメッセージを出力します。ここで
expected 2 args; got 0
とあるのは、2個の引数が必要なのに、0個の引数を指定した(省略した)ことを意味します。
>>> Point(1,2,3) Traceback (most recent call last): File "", line 1, in TypeError: _new_impl(): expected 2 args; got 3
余分な引数を与えても、同様のエラーメッセージを出力します。
■ オブジェクトの識別性
>>> p
Point@b5e07a
生成したインスタンス p には、オブジェクトの識別性を保証する情報 b5e07a が与えられます。
>>> for _ in range(5): print Point(3,4) ... Point@297ad9 Point@407072 Point@964f92 Point@4233fd Point@633589
実際に、同じ座標を持つ5つのインスタンスを生成すると、それぞれに固有の識別情報を持つのが分かります。
■ 属性を参照する
(3, 4)属性値を参照するには、ドット「.」を利用します。(x 座標を表わす)属性 .x を参照すると、その値 3 が得られます。同様に(y 座標を表わす)属性 .y の値 4 が得られます。■ 属性を設定する
>>> p.x = 5 >>> p.x, p.y (5, 4)
属性値を設定(変更)するには、演算子 = を利用します。すると、属性 .x の値が、3 から 5 へと変化したのが分かります。■ クラスを参照する
属性 .class を参照すると、その「クラス」オブジェクト Point が得られます。 >>> p1 = Point(3,4) >>> p2 = p1.class(5,6)コンストラクターと同様に、「クラス」オブジェクトにも演算子 () を適用できます。すると、新たな「インスタンス」オブジェクト p2 を生成します。 《Note》コンストラクター:p1.class(5,6) という形式が、他のメソッド呼び出しと同じ構文に従っているのが分かります。演算子 () を適用できる対象は、関数やメソッドだけでなく、クラスオブジェクトを含めた、任意の呼び出し可能オブジェクトです。すべてが「オブジェクト」であることを強調したいときには、「関数」オブジェクト、「メソッド」オブジェクト、そして、「インスタンス」オブジェクト、「クラス」オブジェクトと呼ばれます。■>>> p1.x, p1.y (3, 4) >>> p2.x, p2.y (5, 6)2つの「インスタンス」オブジェクトは、それぞれ異なる座標値を持ちます。Tips
》作業中です《Last updated♪09/05/30