Eso mismo quería decir yo. Si en lugar de eso haces un set,<br><br>obj.d = "hola",<br><br>volverá a pasar por el setter.<br>Quizá esto <<a href="http://users.rcn.com/python/download/Descriptor.htm">http://users.rcn.com/python/download/Descriptor.htm</a>> 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.<br clear="all">
<br>-----<br>Pau<br><br>Python..., what else?<br>
<br><br><div class="gmail_quote">2011/1/31 Daniel Garcia <span dir="ltr"><<a href="mailto:dani@danigm.net">dani@danigm.net</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><div></div><div class="h5">On Mon, Jan 31, 2011 at 04:25:51PM -0500, Jose Caballero wrote:<br>
> Hola,<br>
><br>
> perdón por el subject, es un poco críptico. Intento explicarlo...<br>
><br>
> Sea una clase C como la siguiente<br>
><br>
> ----------------------------------------------------------------------<br>
> class C:<br>
> def __init__(self):<br>
> self.x = 0<br>
> self.d = {'a':'A','b':'B'}<br>
> def __setattr__(self, var, value):<br>
> print 'invoking __setattr__ ', var, value<br>
> self.__dict__[var] = value<br>
> ----------------------------------------------------------------------<br>
><br>
> Si ahora escribimos un código como<br>
><br>
> obj = C()<br>
><br>
> Se genera el siguiente output<br>
><br>
> invoking __setattr__ x 0<br>
> invoking __setattr__ d {'a': 'A', 'b': 'B'}<br>
><br>
> Que corresponde a las dos asignaciones que aparecen en el __init__()<br>
> Perfecto.<br>
><br>
> ----------------------------------------------------------------------<br>
><br>
> Si además hacemos algo como<br>
><br>
> obj.x = 1<br>
><br>
> obtenemos una nueva línea en el output<br>
><br>
> invoking __setattr__ x 1<br>
><br>
> ----------------------------------------------------------------------<br>
><br>
> Sin embargo no veo una línea similar si ahora escribo<br>
><br>
> obj.d['a']='AA'<br>
><br>
> ¿Por qué?<br>
<br>
</div></div>Al hacer obj.d['a'] = 'AA' no se está llamando al setattr porque no<br>
estás añadiendo un atributo al objeto, sino un elemento al<br>
diccionario d.<br>
<br>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div><br>