《22》要素数:メソッド __len__〈Python 2.x 版〉

前の記事記事一覧次の記事

実録:はじめてのプログラミング《Python2.x》
《22》要素数:メソッド __len__

《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月12日(木)

今日の進捗

  • Language Reference: Data model
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 リストに要素を挿入するのはわりと簡単なのですが削除するのはとても面倒で気が抜けません。
担当:伊藤/本間 。(^^)

素数:メソッド __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 を使って、引数に指定した連結リストの要素数が得られます。

class myList(object):
    ...
    def __len__(self):
        return reduce(lambda n,e: n+1, self, 0)

メソッド __len__ は、組み込み関数 len に呼応して、シーケンス内の要素数を得る手段を提供します。組み込み関数 reduce を利用すると、このように簡潔に表現できます。

《Note》(次の課題で示す)for 文と比べて、より簡潔に表現できます。ただ self と記述するだけで、各要素 e を参照する手段には依存しない(情報隠蔽の原則に沿って)抽象的な表現ができるのも〈GoFIterator パターンの効用のひとつです。

受講者への課題

for 文を利用すると、次のようになります。

    def __len__(self):
        n = 0
        for _ in self:
            n += 1
        return n

reduce 版と比較して、その長所/短所について考察してください。■

Tips

Last updated♪09/03/11