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


回答:


290

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

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

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

また、値を設定する場合は、__setitem__メソッドも実装する必要があります。それ以外の場合は、次のようになります。

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

63

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

編集する

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

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


67
__getslice__, __setslice__`と__delslice__' have been deprecated for the last few releases of ver 2.x (not sure exactly when), and are no longer supported in ver 3.x. Instead, use __getitem__ . __setitem__`と__delitem__' and test if the argument is of type スライス, i.e.: でisinstance(引数、スライス)の場合:...
ドン・オドネル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.