Python.use(better) #OOP:変数〔variable〕

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

OOP:変数〔variable〕

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

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

オブジェクトの3表現

オブジェクトを表現(参照)する方法として、

  • リテラル〔literal〕
  • 変数〔variable〕
  • 式〔expression〕

が挙げられます。

変数を利用するということ

変数を利用することの意義について考察します。変数は、

  • 任意のオブジェクトを参照する手段

を提供します。変数は、

  • 関数定義における関数名の名前、
  • 関数定義における引数の名前、
  • クラス定義におけるクラスの名前、
  • クラス定義における属性の名前、

など、すべてに共通する概念モデルを提供します。

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 を生成して、エラーメッセージが出力されます。これは「変数の名前(識別子)が未定義である」ことを意味します。
変数による束縛
オブジェクトを生成するときに、必要なリソースが確保されます。これらは、オブジェクトが不要になると回収され、新たなオブジェクトを生成するために再利用されます。そのオブジェクトがまだ必要かどうかは、それを参照するもの(変数)の存在に依存します。そこで、必要なオブジェクトが回収されないように、オブジェクトを参照する術が必要になります。それを可能にするのが、変数によるオブジェクトの束縛〔binding〕です。
>>> a = 345; id(a)    #1
19121664
>>> a = 345; id(a)    #2
19121648
>>> b = a; id(b)      #3
19121648
>>> a = 345; id(a)    #4
19121232
>>> id(b)
19121648
■ #1:
変数 a は、新たに生成した整数オブジェクト 345〈id:19121664〉を束縛します。
■ #2:
変数 a は、既存の整数オブジェクト〈id:19121664〉を解放して、新たに生成した整数オブジェクト 345〈id:19121648〉を束縛します。これは、先に生成したオブジェクトと同じ値を持ちますが、別のオブジェクトです。このとき、整数オブジェクト〈id:19121664〉は、まだ回収されずに存在するかもしれませんが、それを参照する術がありません。そのため「存在しない」のも同然です。
■ #3:
変数 b は、既存の整数オブジェクト〈id:19121648〉を束縛します。このとき、同一のオブジェクトが、異なる変数によって束縛されています。
■ #4:
変数 a は、既存のオブジェクト〈id:19121648〉を解放して、新たに生成した整数オブジェクト 345(id:19121232)を束縛します。これは、先に生成したオブジェクトと同じ値を持ちますが、別のオブジェクトです。このとき、整数オブジェクト〈id:19121648〉は、まだ回収されずに存在します。なぜなら、変数 b によって束縛されているからです。実際に、変数 b を参照すると、既存のオブジェクト〈id:19121648〉が得られます。 》こちらに移動中です《TOP

関連記事

Last updated♪2010/01/03