Python.use(better) #OOP:識別性〔identity〕
‖記事一覧‖ Python.use(better)《Python3.1》《復刻版》
OOP:識別性〔identity〕
オブジェクト指向プログラミング〔OOP〕の基本概念の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。
オブジェクトの3要素
オブジェクトを特徴付ける3要素として、
- 識別性〔identity〕
- 状態〔state〕
- 振舞〔behavior〕
が挙げられます。
■ 識別性
識別性は、あるオブジェクトを他のオブジェクト群と区別するのに必要な特性です。
DNA 情報を用いて、個人を識別する技術が確立されています。ただし、双子の DNA は同じなので、これでは不十分です。それでも、指紋だけは異なるので、これなら識別できます。また、GPS〔Global Positioning System〕を用いて、その位置を特定する技術が確立されています。その時刻にその場所に立てるのはたった1人なので、これも個人を識別するのに有効です。
では、オブジェクトを区別するには、何を利用するのが便利でしょうか。GPS と同様に、その位置だけで各オブジェクトを特定したいなら「アドレス」を利用できます。なぜなら、その時刻にそのアドレスに存在するオブジェクトは、ただ1つだからです。すると、組み込み関数 id によって、各オブジェクトを識別する情報としてアドレス値が得られるのも、納得がいくでしょう。
《note》同時刻でなければ、異なるオブジェクトが同じ id 値を持ち得るので、注意が必要です。□
コードを記述するときには、変数を用いてオブジェクトを特定できます。ただし、変数の識別子(名前)とオブジェクト自身の識別性とを、混同しないように注意が必要です。異なるオブジェクトを参照するには、異なる変数を利用します。ただし、変数が異なるからと言って、参照するオブジェクトが異なるとは限りません。このような状況を、次の事例で示します。
■ 事例1:異なる変数が同じオブジェクトを参照する
>>> a = 3; b = 3 >>> id(a); id(b) 3483808 3483808 >>> c, d = 3, 3 >>> id(c); id(d) 3483808 3483808 >>> a is b True >>> c is d True
このとき、異なる4つの変数によって参照される 3 は、すべて同一のオブジェクトです。
■ 事例2:異なる変数が異なるオブジェクトを参照する
>>> a = 345; b = 345 >>> id(a); id(b) 19121648 19121648 >>> c, d = 345, 345 >>> id(c); id(d) 19121056 19121712 >>> a is b True >>> c is d False
このとき、異なる4つの変数によって参照される 345 は、同一のオブジェクトとは限りません。
■ 発展課題
同じ値を持つ整数リテラルに対して、次のように、
>>> x, y = 256, 256 >>> x is y True >>> x, y = 257, 257 >>> x is y False複数の異なるオブジェクトが生成されることがあります。この状況は、Python のバージョンの違い、また Jython/IronPython でも異なります。そこで、この境界値(ここでは 256,257)を検出するプログラムを作成してください。
《hint》Jython2.5 では、次のように、
>>> x = 899 >>> y = 899 >>> x is y True >>> x = 900 >>> y = 900 >>> x is y Falseその境界値(ここでは 2 899,900)が、Python3.1 とは異なります。
□
》こちらに移動中です《
↑TOP