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

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

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

今日の進捗

  • The Python Standard Library: Mapping Types — dict
  • Python.use(better) -- セミナー研修テキスト
  • 連想リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 すみません。私の感違いで古い版も編集してしまったので土日にもとへ戻しておきます。
担当:伊藤/本間 。(^^)

添字付け:メソッド __getitem__

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

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

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

Traceback (most recent call last):
  ...
    raise KeyError,key
KeyError: '@'

キー要素(文字列)を使って、値要素(ASCII コード値)を参照できます。

class myDict(object):
    ...
    def __getitem__(self, key):
        for k,v in self._items():
            if k==key: return v
        else:
            raise KeyError,key

メソッド __getitem__ は、演算子 [] に呼応して、キー要素を利用して対応する値要素を得る手段を提供します。for に続く制御変数 k が、指定した引数 key と同じ値になるとき、その制御変数 v をリターン値にします。このように簡潔に表現できるのも〈GoFIterator パターンの効用のひとつです。また、次のことから、

>>> m = myDict((e,ord(e)) for e in "ABC")
>>> m
{'A': 65, 'B': 66, 'C': 67}
    
67 >>> m.__getitem__("C") 67
メソッド __getitem__ が、演算子 [] と同等の表現になるのが分かります。

Tips

Last updated♪09/03/14