2009-12-24 16 views

Respuesta

164

Necesita usar el __getitem__ method.

>>> class MyClass: 
...  def __getitem__(self, key): 
...   return key * 2 
... 
>>> myobj = MyClass() 
>>> myobj[3] 
6 

Y si usted va a ser el establecimiento de valores que necesita para poner en práctica el __setitem__ method también, 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__' 
34

Para sobrecargarlo completamente, también debe implementar los métodos __setitem__ y __delitem__.

edición

Casi lo olvido ... si quieres emular completamente una lista, también es necesario __getslice__, __setslice__ and __delslice__.

Hay todo documentado en http://docs.python.org/reference/datamodel.html

+36

'__getslice__,' '__setslice__' y __delslice__' han quedado en desuso para las últimas versiones 2.x de ver (no estoy seguro exactamente cuando), y ya no están soportados en el versículo 3.x. En su lugar, use '__getitem__'. '__setitem__' y' __delitem__ 'y prueba si el argumento es de tipo 'slice', es decir:' if isinstance (arg, slice): ... –