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

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

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

今日の進捗

  • The Python Standard Library: Mapping Types — dict
  • Python.use(better) -- セミナー研修テキスト
  • 連想リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 残りあと一週間ですがメタプログラミングについてもマスターしたいです。
担当:伊藤/本間 。(^^)

添字付け:メソッド __setitem__

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

def ex():
    m = myDict()            ; print m,"\t#",m.__class__.__name__
    for e in "ABC":
        m[e] = ord(e)       ; print m

>>> ex()
{} 	# myDict
{'A': 65}
{'A': 65, 'B': 66}
{'A': 65, 'B': 66, 'C': 67}

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

class myDict(object):
    ...
    def __setitem__(self, key, value):
        for i,(k,v) in enumerate(self._items()):
            if k==key:
                self._values[i] = value
                break
        else:
            self._keys  .append(key)
            self._values.append(value)

メソッド __setitem__ は、演算子 [] および = に呼応して、添字を利用して要素対を設定する手段を提供します。局所変数 k が、指定した引数 key と同じ値になるとき、対応する値要素 self._values[i] を引数 value と同じ値に再設定します。同じキー要素が存在しないときには、新たな要素対 key/value を追加します。また、次のことから、

>>> m = myDict((e,ord(e)) for e in "ABC"); m
{'A': 65, 'B': 66, 'C': 67}
>>> m["C"] = 3; m
{'A': 65, 'B': 66, 'C': 3}
>>> m = myDict((e,ord(e)) for e in "ABC"); m
{'A': 65, 'B': 66, 'C': 67}
>>> m.__setitem__("C",3); m
{'A': 65, 'B': 66, 'C': 3}

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

Tips

Last updated♪09/03/14