Как переопределить оператор [] в Python?

Каково имя метода переопределения оператора [] (нотация подстроки) для класса в Python?

Ответ 1

Вам нужно использовать метод __getitem__.

>>> class MyClass:
...     def __getitem__(self, key):
...         return key * 2
...
>>> myobj = MyClass()
>>> myobj[3]
6

И если вы собираетесь устанавливать значения, вам нужно будет реализовать метод __setitem__, иначе это произойдет:

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

Ответ 2

Чтобы полностью перегрузить его, вам также необходимо реализовать методы __setitem__ и __delitem__.

изменить

Я почти забыл... если вы хотите полностью эмулировать список, вам также нужно __getslice__, __setslice__ and __delslice__.

Все документированы в http://docs.python.org/reference/datamodel.html