Ответы:
Вам нужно использовать __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.:
если есть экземпляр (arg, slice): ...