シーケンスタイプに=
を割り当てるためのPythonマジックメソッド__setitem__
があります。 コンテナレベルで追加の割り当て+=
のための魔法の方法がありますか?操作は、項目タイプの拡張された割り当てに正常に分類されているように見えます。それは論理的です。しかし、他のほとんどすべてのための魔法の方法があります、私はシーケンスの型でこれらの演算子のためのメソッドのセットがあるはずだと思った。私はそれを見逃しましたか?`self [key] + = value`のマジックメソッド?
アプリケーションは一種のデータベースです。 SELECTで__getitem__
を実装し、INSERTで__setitem__
を実装すると考えてください。 UPDATEには__additem__
などが必要でしょうか?
from __future__ import print_function
class Item(object):
def __init__(self, value):
self.value = value
def __str__(self):
return "Item " + str(self.value)
def __iadd__(self, other):
print("Item iadd", self, other)
return Item(self.value + "+" + other.value)
class Container(object):
def __getitem__(self, key):
print("Container getitem", key)
return Item(key)
def __setitem__(self, key, value):
print("Container setitem", key, value)
return self
def __additem__(self, key, value):
print("Container additem would be nice", key, value)
return self
は、ここで選択します:
>>> c = Container()
>>> _ = c['key']
Container getitem key
ここでINSERTです:
>>> c['key'] = Item('other')
Container setitem key Item other
UPDATEを実装する方法は?分解せずにSELECTとINSERT:
>>> c['key'] += Item('other')
Container getitem key
Item iadd Item key Item other
Container setitem key Item key+other
だから、壊れた手順とは異なる累算代入を実装する方法はありますか? Itemクラスにすべての振る舞いを入れないで?
あなたはカット&ペースト上記のコードをPythonインタプリタへ、またはこのPythonのフィドルでそれを試すことができます。 http://pythonfiddle.com/add-item-for-sequence/
related questionいいえ、ありますself[key] += value