Eso mismo quería decir yo. Si en lugar de eso haces un set, obj.d = "hola",
volverá a pasar por el setter. Quizá esto <http://users.rcn.com/python/download/Descriptor.htm> te resulte interesante. También recuerdo que había una presentación de alguien, en texto plano, sobre metaclasses y descriptores, pero no lo encuentro. ----- Pau Python..., what else? 2011/1/31 Daniel Garcia <d...@danigm.net> > On Mon, Jan 31, 2011 at 04:25:51PM -0500, Jose Caballero wrote: > > 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é? > > Al hacer obj.d['a'] = 'AA' no se está llamando al setattr porque no > estás añadiendo un atributo al objeto, sino un elemento al > diccionario d. > > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > >
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/