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

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

191
задан sophros 20 January 2019 в 01:21
поделиться

3 ответа

Вам необходимо использовать метод __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__'
249
ответ дан 23 November 2019 в 05:34
поделиться

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

.
14
ответ дан 23 November 2019 в 05:34
поделиться

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

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

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

Все это описано в http://docs.python.org/reference/datamodel.html

54
ответ дан 23 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: