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.
pgpTkwsFymkCG.pgp
Description: PGP signature
_______________________________________________ Python-es mailing list [email protected] http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
