Python.use(better) #OOP:識別性 -- 整数オブジェクト

記事一覧 Python.use(better)《Python3.1》《復刻版》

識別性 -- 整数オブジェクト

《著》真樹育未、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第1版♪1988/05/23 ● 第2版♪2001/01/29 ● 第3版♪2009/12/15

オブジェクト指向プログラミング〔OOP〕の基本概念の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。

オブジェクトの3要素

オブジェクトを特徴付ける3要素として、

  • 識別性〔identity〕
  • 状態〔state〕
  • 振舞〔behavior〕

が挙げられます。

概要

関数やクラスを定義するということは、その名前と同じ変数によって、生成した関数オブジェクトやクラスオブジェクトを束縛しているにすぎません。

変数を定義するということ

変数を定義することの意義について考察します。

Python 3.1 (r31:73578, Jun 27 2009, 21:49:46) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "copyright", "credits" or "license()" for more information.
    
Traceback (most recent call last): File "", line 1, in a NameError: name 'a' is not defined
未定義の変数を参照しようとすると、例外 NameError を生成して、エラーメッセージが出力されます。これは「変数の名前(識別子)が未定義である」ことを意味します。
《tips》変数は、それによって束縛されるオブジェクトとは独立した概念です。そのため、対象となるオブジェクト(整数、関数、クラスなど)には依存しない、共通の操作が可能になります。
整数オブジェクト
リテラル表現を持たないオブジェクトは、それを参照する術がありません。変数は、リテラル表現に代えて、任意のオブジェクトを参照する手段を提供します。
>>> a = 345    #1a:
>>> id(a)
19121504
>>> a = 345    #2a:
>>> id(a)
19121648

>>> type(a)

同じ値を持つ、変数 a を再定義します。このとき、どのようなオブジェクトが生成されては、解放されるのでしょうか。
■ #1a:
変数の名前 a は、整数オブジェクト 345 を参照する手段を提供します。 いくつかの例外(後述する 1b,2b など)を除くと、リテラル表現は、オブジェクトを識別する手段として適切ではありません。なぜなら、同じリテラル表現を持つ異なるオブジェクトが、他にも存在するからです。
■ #2a:
変数 a の束縛を解いて、ある整数オブジェクト 345(id:19121504)を解放します。すると、変数 a を介して、別の整数オブジェクト 345(id:19121648)を参照できるようになります。 2つの整数オブジェクトは、どちらも同じ値 345 を持ちますが、それぞれに異なるオブジェクトです。そのため、変数 a を介して得られる値は同じですが、同じオブジェクトとは限らないので、注意が必要です。
《note》変数による束縛:オブジェクトを生成するときには、必要なリソース(メモリー領域)が確保されます。これらは、オブジェクトが不要になると回収され、新たなオブジェクトを生成するために再利用されます。あるオブジェクトをまだ必要とするかは、それを参照する他のオブジェクトの存在に依存します。そのため、まだ必要なオブジェクトが回収されないように、それを参照する術が必要になります。それを可能にするのが、変数によるオブジェクトの束縛〔binding〕です。
《余録》リテラル表現によってオブジェクトを識別できる場合
>>> a = 3    #1b:
>>> id(a)
3483808
>>> a = 3    #2b:
>>> id(a)
3483808
■ #1b:
変数の名前 a は、整数オブジェクト 3 を参照する手段を提供します。
■ #2b:
変数 a の束縛を解いて、整数オブジェクト 3(id:3483808)を解放しても、再束縛によって「同じ」整数オブジェクト 3(id:3483808)を参照します。この場合には、リテラル表現が、オブジェクトを識別する手段としても有効です。
《note》:新たなオブジェクトを生成するか、既存のオブジェクトを再利用するかは、システムに委ねられます。そこに、プログラマーは介入できません。
》こちらに移動中です《TOP

関連記事

Last updated♪2009/12/17