Python.use(better) #list: step09 -- def __getitem__(self, key)
‖記事一覧‖ Python.use(better)《Python3.1》
def __getitem__(self, key)
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
事例:モジュールを起動する
■ 全項目を確認する
対象になるメソッドを「確認」するには、関数 do を利用します。
$ python -i myList.py >>> do() ... 9: step09 -- def __getitem__(self, key)
■ 各項目を実行する
各ステップの「動作」を確認するには、関数 do の実引数を指定します。
>>> do(9) ... >>> # ---------------------------------------- __getitem__ >>> s = myList("ABC"); s, len(s) (['A', 'B', 'C'], 3)'A''B''C'IndexError: myList index out of range >>>事例:コードの解説
def step09(): """def __getitem__(self, key)""" class myList(object): def __iter__(self): ... def index(self, value): for i,e in enumerate(self): if e==value: return i else: s = self.__class__.__name__ raise ValueError( "ValueError: {0}.index(x): x not in {0}".format(s)) def __getitem__(self, key): #1: for i,e in enumerate(self): if i==key: return e else: s = self.__class__.__name__ raise IndexError( "IndexError: %s index out of range"%s) ## ---------------------------------------- local = locals() tips = ( "__init__", "append", "__len__", "__contains__", "count", "index", "__getitem__", ) global dirs; local = locals() dirs += "__delitem__", for e in dirs: print(">>> #","-"*40,e) eval("ex_%s(SPEC, local)"%e)《TIPS》メソッド __iter__ を定義すると、self と記述するだけで、それを実現する方法(how)に依存しない、抽象表現(what)が可能になります。■ #1: 要素の位置
メソッド index は(最初に見つかった)要素 value のオフセット位置を獲得します。def index(self, value): for i,e in enumerate(self): if e==value: return i else: s = self.__class__.__name__ raise ValueError( "ValueError: {0}.index(x): x not in {0}".format(s))リスト self の要素 e が引数 value と同値なら、引数 value と同値のものが見つからないなら、
- 制御変数 i の値をリターン値にします。
- 例外 ValueError を生成するとともに、
- クラスの名前 __class__.__name__ を含むエラーメッセージを出力します。
■ #2: 要素の参照
メソッド __getitem__ は、演算子 [] に呼応して、各要素の値を参照します。def __getitem__(self, key): #1: for i,e in enumerate(self): if i==key: return e else: s = self.__class__.__name__ raise IndexError( "IndexError: %s index out of range"%s)for に続く制御変数 i が引数 key と同値なら、引数 key と同値のものが見つからないなら、
- リスト self の要素 e をリターン値にします。
》こちらに移動中です《 ↑TOP
- 例外 IndexError を生成するとともに、
- クラスの名前 __class__.__name__ を含むエラーメッセージを出力します。