[Python-es] ¿ __setattr__() no se invoca para reescribir un par (key,value) en un diccionario dentro de una clase?

Jose Caballero jcaballero.hep en gmail.com
Lun Ene 31 22:25:51 CET 2011


Hola,

perdón por el subject, es un poco críptico. Intento explicarlo...

Sea una clase C como la siguiente

----------------------------------------------------------------------
class C:
        def __init__(self):
                self.x = 0
                self.d = {'a':'A','b':'B'}
        def __setattr__(self, var, value):
                print 'invoking __setattr__ ', var, value
                self.__dict__[var] = value
----------------------------------------------------------------------

Si ahora escribimos un código como

obj = C()

Se genera el siguiente output

invoking __setattr__  x 0
invoking __setattr__  d {'a': 'A', 'b': 'B'}

Que corresponde a las dos asignaciones que aparecen en el __init__()
Perfecto.

----------------------------------------------------------------------

Si además hacemos algo como

obj.x = 1

obtenemos una nueva línea en el output

invoking __setattr__  x 1

----------------------------------------------------------------------

Sin embargo no veo una línea similar si ahora escribo

obj.d['a']='AA'

¿Por qué?
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110131/450c0512/attachment.html>


Más información sobre la lista de distribución Python-es