Python.use(better) #OOP:式〔expression〕

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

OOP:式〔expression〕

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

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

オブジェクトの3表現

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

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

が挙げられます。

式を利用するということ

式を利用することの意義について考察します。

式は、任意のオブジェクトを参照する手段を提供します。式には、

  • 関数呼び出し
  • 演算子
  • メソッド呼び出し
  • クラス呼び出し

などがあります。

■ 関数オブジェクト
>>> id(len)
178776
>>> type(len)


関数も他のオブジェクトと同様に、識別性を持ちます。関数オブジェクト(id:178776)は、関数の名前と同じ変数 len によって束縛されます。

■ 関数呼び出し:リテラル引数
>>> id("ABC")
6370656
>>> len("ABC")
3
>>> id(_)
3483808

関数を呼び出すには(関数の名前と同じ)変数 len に演算子 () を適用します。ここでは、実引数に文字列オブジェクト "ABC" を指定します。すると、リターン値として、整数オブジェクト 3(id:3483808)が得られます。

■ 関数呼び出し:変数引数
>>> s = "ABC"; id(s)
6370656
>>> len(s)
3
>>> id(_)
3483808

ここでは、実引数に変数 s を指定します。すると、変数 s によって束縛される、文字列オブジェクト "ABC" を指定したのと同じ結果が得られます。つまり、変数の有無は、オブジェクト(整数、関数)が提供する機能(メソッド呼び出しの結果)に影響しません。変数の有無が影響するのは、オブジェクトが回収されずに、そこに存在し続けるかという点だけです。

■ 関数呼び出しの意義

関数呼び出しによって(そのリターン値として得られる)任意のオブジェクトを参照できます。関数呼び出しも、他の式と同様に、任意のオブジェクトを参照する手段として有効です。たとえば、整数オブジェクト 3 を表現する方法は様々です。ここでは、式 len("ABC") または len(s) によって、それを実現しているだけのことです。

■ 関数呼び出しの意義:変数
>>> f = len; id(f)
178776
>>> f("ABC")
3
>>> id(_)
3483808

■ 関数呼び出しの意義:lambda 式
>>> f = lambda e: len(e)
>>> f("ABC")
3
>>> id(_)
3483808

>>> id(f)
19227896
>>> type(f)


@@@@@@@@@@@@@@@@@@@

変数による束縛

《tips》変数は、それによって束縛されるオブジェクトとは独立した概念です。そのため、対象となるオブジェクト(整数、関数、クラスなど)には依存しない、共通の操作が可能になります。

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

lambda 式は、名前を持たない関数オブジェクトを参照する、直接的な手段を提供します。式は(lambda 式に限らず)リテラル表現に代えて、オブジェクトを参照する手段のひとつを提供します。例えば、

>>> id(7)
3483872
>>> id(3+4)
3483872

リテラル表現 7 と式 3+4 とは、どちらも同じ「整数」オブジェクト 7(id:3483872)を参照します。このように、オブジェクトを参照(表現)するには、次の3つの手段があります。

>>> n = 3
>>> id(n.__add__(4))
3483872

>>> 3.__add__(4)    # (x.x) ... too bad
SyntaxError: invalid syntax (, line 1)
>>> 3.0.__add__(4)
7.0

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/12/17