《22》要素数:メソッド __len__
‖記事一覧‖
Python.use(better, for=”Rookie") 実録:はじめてのプログラミング《Python3.0》
要素数:メソッド __len__
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
第3版♪2009/02/28 ● 2009年2月12日(木)
概要
デザインパターンを学習するための題材として、連結リストを作成します。
組み込み型 list と同等の機能を実現することで、その理解を深めます。list を利用できる状況ならいつでも、これから作成するクラス myList で代用できることを目指します。
※ JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
要素数:メソッド __len__
組み込み型 list と同様に、連結リストの要素数が得られると便利です。すると、
def ex(): s = myList() print(s,"\t#",s.__class__.__name__) print len(s) s = myList("ABC") print(s,"\t#",s.__class__.__name__) print len(s)
その動作(仕様)を確認すると、
>>> ex()
[] # myList
0
['A', 'B', 'C'] # myList
3
組み込み関数 len を使って、引数に指定した連結リストの要素数が得られます。
実現:メソッド __len__
メソッド list.__len__ に準拠したものを実現します。
class myList(object): ... def __len__(self): return reduce(lambda n,e: n+1, self, 0)
組み込み関数 len に呼応して、シーケンス内の要素数を得る手段を提供します。組み込み関数 reduce を利用すると、このように簡潔に表現できます。
《Note》情報隠蔽の原則:〈GoF〉Iterator パターンを適用すると、self と記述するだけで、各要素 e を参照する手段(how)に依存しない抽象表現(what)ができます。
受講者への課題
for 文を利用すると、次のようになります。
def __len__(self): n = 0 for _ in self: n += 1 return n
reduce 版と比較して、その長所/短所について考察してください。■
関連記事
- Python への扉
- INDEX《Python》__len__
- INDEX《Swing》
- 実録 はじめての…《22》要素数:メソッド __len__ - 続・ひよ子のきもち《Python2.x》
Last updated♪09/06/18