web-dev-qa-db-ja.com

Pythonで[]演算子をオーバーライドする方法は?

Pythonのクラスの[]演算子(添字表記)をオーバーライドするメソッドの名前は何ですか?

182
Sahas

__getitem__メソッド を使用する必要があります。

class MyClass:
    def __getitem__(self, key):
        return key * 2

myobj = MyClass()
myobj[3] #Output: 6

また、値を設定する場合は、 __setitem__ method も実装する必要があります。実装しないと、これが発生します。

>>> myobj[5] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
236
Dave Webb

完全にオーバーロードするには、__setitem__メソッドと__delitem__メソッドも実装する必要があります。

編集

リストを完全にエミュレートする場合は、ほとんど忘れていました... __getslice__, __setslice__ and __delslice__も必要です。

すべてが http://docs.python.org/reference/datamodel.html に文書化されています

51
Dave Kirby

__getitem__メソッドを探しています。 http://docs.python.org/reference/datamodel.html 、セクション3.4.6を参照してください

11
Confusion