Respuestas:
Necesitas usar el __getitem__método .
class MyClass:
def __getitem__(self, key):
return key * 2
myobj = MyClass()
myobj[3] #Output: 6
Y si va a establecer valores, también deberá implementar el __setitem__método ; de lo contrario, esto sucederá:
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
Para sobrecargarlo completamente, también necesita implementar los métodos __setitem__y __delitem__.
editar
Casi se me olvida ... si quieres emular completamente una lista, también la necesitas __getslice__, __setslice__ and __delslice__.
Todos están documentados en http://docs.python.org/reference/datamodel.html
Estás buscando el __getitem__método. Ver http://docs.python.org/reference/datamodel.html , sección 3.4.6
__getslice__,__setslice__` y__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__` y__delitem__' and test if the argument is of typecorte, i.e.:si es instancia (arg, corte): ...