Как переопределить оператор [] в Python? - PullRequest
169 голосов
/ 24 декабря 2009

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

Ответы [ 3 ]

224 голосов
/ 24 декабря 2009

Вам необходимо использовать метод __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__'
48 голосов
/ 24 декабря 2009

Для полной его перегрузки вам также необходимо реализовать методы __setitem__ и __delitem__.

редактировать

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

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

11 голосов
/ 24 декабря 2009

Вы ищете метод __getitem__. См. http://docs.python.org/reference/datamodel.html, раздел 3.4.6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...