《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 をリターン値にします。このように簡潔に表現できるのも〈GoF〉Iterator パターンの効用のひとつです。また、次のことから、
>>> 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