¿Cómo anular el operador [] en Python?

Resuelto Sahas asked hace 14 años • 3 respuestas

¿Cuál es el nombre del método para anular el []operador (notación de subíndice) de una clase en Python?

Sahas avatar Dec 24 '09 17:12 Sahas
Aceptado

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, sucederá esto:

>>> myobj[5] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
David Webb avatar Dec 24 '2009 10:12 David Webb

Para sobrecargarlo completamente también necesitas implementar los métodos __setitem__y __delitem__.

editar

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

Todos están documentados en http://docs.python.org/reference/datamodel.html

Dave Kirby avatar Dec 24 '2009 10:12 Dave Kirby