Respostas:
Você precisa usar o __getitem__
método .
class MyClass:
def __getitem__(self, key):
return key * 2
myobj = MyClass()
myobj[3] #Output: 6
E se você definir valores, também precisará implementar o __setitem__
método , caso contrário, isso acontecerá:
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
Para sobrecarregá-lo completamente, você também precisa implementar os métodos __setitem__
e __delitem__
.
editar
Eu quase esqueci ... se você quiser emular completamente uma lista, também precisa __getslice__, __setslice__ and __delslice__
.
Todos estão documentados em http://docs.python.org/reference/datamodel.html
Você está procurando o __getitem__
método Consulte http://docs.python.org/reference/datamodel.html , seção 3.4.6
__getslice__,
__setslice__` e__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__` e__delitem__' and test if the argument is of type
fatia, i.e.:
se isinstance (arg, fatia): ...