¿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?
140
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
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
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
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