¿Cómo anular el operador []?


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

Author: Aaron Hall, 2009-12-24

3 answers

Es necesario utilizar el __getitem__ método .

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

Y si va a establecer valores, necesitará implementar el __setitem__ método 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__'
 187
Author: Dave Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-31 00:25:57

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

Editar

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

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

 39
Author: Dave Kirby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-24 11:47:34

Está buscando el método __getitem__. Véase http://docs.python.org/reference/datamodel.html , sección 3.4.6

 10
Author: Confusion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-19 07:29:51