インスタンスを生成する

>>> 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