How to override the [] operator in Python?

Sahas picture Sahas · Dec 24, 2009 · Viewed 115.6k times · Source

What is the name of the method to override the [] operator (subscript notation) for a class in Python?

Answer

Dave Webb picture Dave Webb · Dec 24, 2009

You need to use the __getitem__ method.

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

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

And if you're going to be setting values you'll need to implement the __setitem__ method too, otherwise this will happen:

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