Як перемогти оператора [] в Python?


225

Як називається метод переосмислення []оператора (позначення підписки) для класу в Python?

Відповіді:


290

Вам потрібно скористатися __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__'

63

Щоб повністю перевантажити його, вам також потрібно застосувати методи __setitem__та __delitem__методи.

редагувати

Я майже забув ... якщо ви хочете повністю наслідувати список, вам також потрібно __getslice__, __setslice__ and __delslice__.

Усі вони задокументовані на http://docs.python.org/reference/datamodel.html


67
__getslice__, __setslice__` і __delslice__' have been deprecated for the last few releases of ver 2.x (not sure exactly when), and are no longer supported in ver 3.x. Instead, use __getitem__ . __setitem__` і __delitem__' and test if the argument is of type зріз, , i.e.: якщо єречовина (арг, зріз): ...
Дон О'Доннелл,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.