メソッド __getitem__ は何処に

メソッド __getitem__ は、演算子 [] の値を参照するときの動作を規定します。


class HashTable:
def __getitem__(self, key):
e = self._detect(key)
if e:
return e[key]
else:
raise KeyError, key

前述した補助関数 _detect を利用して、指定したキー key を含む連結リスト e を獲得します。そして、if に続く条件式 e を満たすなら、該当する連結リストが存在するので、対応する値 e[key] をリターン値とします。それが存在しないなら、例外 KeyError を生成します。


class LinkedList:
def __getitem__(self, key):
for k, v in self.items():
if key == k: return v
return None

if に続く条件式 key==k を満たすなら、指定したキー key を含むリスト項目が存在するので、対応する値 v をリターン値とします。それが存在しないなら、None をリターン値とします。

ためしてガッテン!

>>> p
HashTable([<'good': 1>, <'can': 1, 'happy': 2>, <'as': 2>, <>, <'be': 1>])
>>> p["happy"]
2
>>> p["god"]
KeyError: 'god'

演算子 [] の中に指定した単語が、ハッシュ表に含まれるかどうかを判定した結果 True/False が得られます。単語 "happy" はハッシュ表 p に含まれるので、その出現頻度 2 が得られます。単語 "god" はハッシュ表 p に含まれないので、例外 KeyError を生成するとともに、エラーメッセージとして指定した単語 god を出力します。


《ひよ子のきもち♪2007/12/13》