[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