《24》添字付け:メソッド __setitem__〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《24》添字付け:メソッド __setitem__

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

今日の進捗

  • Language Reference: Data model
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 メールのやりとりに慣れてしまったせいか土日にメールしないととても寂しかったです。
担当:伊藤/本間 。(^^)

添字付け:メソッド __setitem__

組み込み型 list と同様に、添字を利用して各要素を設定できると便利です。すると、

def ex():
    s1 = myList("ABC")
    s2 = myList("XYZ")
    print s1,"\t#",s1.__class__.__name__
    for i in range(len(s1)):
        s1[i] = s2[i]
    print s1,"\t#",s1.__class__.__name__

>>> ex()
['A', 'B', 'C'] 	# myList
['X', 'Y', 'Z'] 	# myList

演算子 [] および = を組み合わせて、各要素を再設定できます。

class myList(object):
    ...
    def __setitem__(self, key, value):
        node,n = self.head.next,0
        while node:
            if n==key:
                node.item = value; break
            node,n = node.next,n+1

メソッド __setitem__ は、演算子 [] および = に呼応して、添字を利用して各要素を設定する手段を提供します。局所変数 n が、指定した引数 key と同じ値になるとき、そのノードの値 node.item を引数 value と同じ値に再設定します。また、次のことから、

>>> s = myList("ABC"); s
['A', 'B', 'C']
>>> s[1] = '@'; s
['A', '@', 'C']
>>> s = myList("ABC"); s
['A', 'B', 'C']
>>> s.__setitem__(1,"@"); s
['A', '@', 'C']

メソッド __setitem__ が、演算子 [] と同等の表現になるのが分かります。

Tips

この場面では〈GoFIterator パターンの効用が活かせません。データ構造に依存する部分は一か所に集中させて記述して、他は抽象的な表現にするのを理想とするのは、そのためです。《ひよ子》□

Last updated♪09/03/13