Eso mismo quería decir yo. Si en lugar de eso haces un set,<br><br>obj.d = &quot;hola&quot;,<br><br>volverá a pasar por el setter.<br>Quizá esto &lt;<a href="http://users.rcn.com/python/download/Descriptor.htm">http://users.rcn.com/python/download/Descriptor.htm</a>&gt; 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">&lt;<a href="mailto:dani@danigm.net">dani@danigm.net</a>&gt;</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>
&gt; Hola,<br>
&gt;<br>
&gt; perdón por el subject, es un poco críptico. Intento explicarlo...<br>
&gt;<br>
&gt; Sea una clase C como la siguiente<br>
&gt;<br>
&gt; ----------------------------------------------------------------------<br>
&gt; class C:<br>
&gt;         def __init__(self):<br>
&gt;                 self.x = 0<br>
&gt;                 self.d = {&#39;a&#39;:&#39;A&#39;,&#39;b&#39;:&#39;B&#39;}<br>
&gt;         def __setattr__(self, var, value):<br>
&gt;                 print &#39;invoking __setattr__ &#39;, var, value<br>
&gt;                 self.__dict__[var] = value<br>
&gt; ----------------------------------------------------------------------<br>
&gt;<br>
&gt; Si ahora escribimos un código como<br>
&gt;<br>
&gt; obj = C()<br>
&gt;<br>
&gt; Se genera el siguiente output<br>
&gt;<br>
&gt; invoking __setattr__  x 0<br>
&gt; invoking __setattr__  d {&#39;a&#39;: &#39;A&#39;, &#39;b&#39;: &#39;B&#39;}<br>
&gt;<br>
&gt; Que corresponde a las dos asignaciones que aparecen en el __init__()<br>
&gt; Perfecto.<br>
&gt;<br>
&gt; ----------------------------------------------------------------------<br>
&gt;<br>
&gt; Si además hacemos algo como<br>
&gt;<br>
&gt; obj.x = 1<br>
&gt;<br>
&gt; obtenemos una nueva línea en el output<br>
&gt;<br>
&gt; invoking __setattr__  x 1<br>
&gt;<br>
&gt; ----------------------------------------------------------------------<br>
&gt;<br>
&gt; Sin embargo no veo una línea similar si ahora escribo<br>
&gt;<br>
&gt; obj.d[&#39;a&#39;]=&#39;AA&#39;<br>
&gt;<br>
&gt; ¿Por qué?<br>
<br>
</div></div>Al hacer obj.d[&#39;a&#39;] = &#39;AA&#39; 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>