Відповіді:
Вам потрібно скористатися __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__'
Щоб повністю перевантажити його, вам також потрібно застосувати методи __setitem__
та __delitem__
методи.
редагувати
Я майже забув ... якщо ви хочете повністю наслідувати список, вам також потрібно __getslice__, __setslice__ and __delslice__
.
Усі вони задокументовані на http://docs.python.org/reference/datamodel.html
Ви шукаєте __getitem__
метод. Див. Http://docs.python.org/reference/datamodel.html , розділ 3.4.6
__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.:
якщо єречовина (арг, зріз): ...