How to override the [] operator in Python?

PythonOperator Overloading

Python Problem Overview


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

Python Solutions


Solution 1 - Python

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__'

Solution 2 - Python

To fully overload it you also need to implement the __setitem__and __delitem__ methods.

edit

I almost forgot... if you want to completely emulate a list, you also need __getslice__, __setslice__ and __delslice__.

There are all documented in http://docs.python.org/reference/datamodel.html

Solution 3 - Python

You are looking for the __getitem__ method. See http://docs.python.org/reference/datamodel.html, section 3.4.6

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSahasView Question on Stackoverflow
Solution 1 - PythonDave WebbView Answer on Stackoverflow
Solution 2 - PythonDave KirbyView Answer on Stackoverflow
Solution 3 - PythonConfusionView Answer on Stackoverflow