メソッド __setitem__ は何処に

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


class HashTable:
def __setitem__(self, key, value):
e = self._detect(key)
if e:
e[key] = value
else:
k = self.hash(key)
self.hashtab[k] = self.hashtab[k].entry(key, value)

まず、補助関数 _detect を使って、指定したキー key を含むリスト項目 e を獲得します。次に、e が存在するなら、連結リスト内に要素対 key/value を設定します。e が存在しないなら、キー key に対するハッシュ値 k と同じ値を含む連結リストに、新たな要素対 key/value から成るリスト項目 entry(key, value) を生成して、これを設定します。


class LinkedList:
def __setitem__(self, key, value):
e = self
while e:
if key == e.key:
e.value = value
break
e = e._next

指定したキー key を含むリスト項目 e が存在するなら、その値 e.value を再設定します。e が存在しないなら、次の項目に進みます。


def entry(self, key, value):
return LinkedList(next=self, key=key, value=value)

メソッド entry は、要素対 key/value を含むリスト項目を先頭に挿入した、新たな連結リストを生成して、それをリターン値とします。