¿Cómo anular el operador [] en Python?
¿Cuál es el nombre del método para anular el []
operador (notación de subíndice) de una clase en Python?
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__'
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