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


225

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

Respuestas:


290

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__'

63

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


67
__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 type corte , i.e.: si es instancia (arg, corte): ...
Don O'Donnell

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.