¿Cuál es el nombre del método para anular el operador []
(notación de subíndice) para una clase en Python?¿Cómo anular el operador []?
120
A
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__'
10
Usted está buscando el método __getitem__
. Consulte http://docs.python.org/reference/datamodel.html, sección 3.4.6
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
Cuestiones relacionadas
- 1. ¿Por qué anular el operador()?
- 2. Posible anular operador nulo-coalescente?
- 3. ¿Alguna manera de anular el operador y en Python?
- 4. Eliminar vs operador eliminar (y el puntero de anular)
- 5. Cómo anular el ecos locales
- 6. Cómo anular el borde: ninguno?
- 7. búsqueda de administrador de Django: cómo anular el controlador predeterminado?
- 8. ¿Cómo anular correctamente la igualdad?
- 9. Cómo anular el enlace en GIN
- 10. En C# cómo anular el método Finalize()?
- 11. ¿Cómo anular el evento onclose en WPF?
- 12. Cómo anular el comportamiento de ActionLink
- 13. ¿Hay alguna manera de anular el operador << en Ruby?
- 14. Cómo anular contiene()?
- 15. Cómo anular ObjectOutputStream.writeStreamHeader()?
- 16. Cómo sobrecargar el operador -> *?
- 17. ¿Cómo uso el operador condicional?
- 18. operador?: (El "operador de Elvis) en PHP
- 19. ¿Cómo anular el filtro en el ArrayAdapter de Android?
- 20. Cómo anular el estilo ofuscado GWT para el encabezado DataGrid
- 21. Cómo anular LongPress en ListFragment?
- 22. Python: cómo inherite y anular
- 23. cómo anular [] corchetes en ruby?
- 24. Imitando el operador "IN"
- 25. Cómo anular la propiedad css?
- 26. ? El operador no funciona
- 27. Anular log4j.properties
- 28. Anular atributos
- 29. ¿Por qué el operador% se conoce como el operador "módulo" en lugar del operador "restante"?
- 30. define el operador void * y el operador bool
'__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): ... –