Atributo compartido por objetos de una misma clase

Jose Caballero jcaballero.hep en gmail.com
Mie Jul 9 20:06:13 CEST 2008


Hola

una cosa que debes tener en cuenta es que el paso de valores por defecto no
funciona exactamente igual que en C++, por ejemplo. A veces puede parecer
confuso. Cambia tu programa por esto:

class A:
   def __init__(self, foo = None):
       if not foo:
          self.bar = []
       else:
          self.bar = foo

a = A()
a.bar.append(6)
b = A()

print a.bar
print b.bar


El resultado es el que creo que buscas:

[6]
[]


Saludos,
Jose











El día 9 de julio de 2008 13:58, Ricardo Catalinas Jiménez <
jimenezrick en gmail.com> escribió:

> Tengo unas nociones basicas acerca de como se gestionan los nombres y
> referencias de los objetos en python, pero el siguiente codigo se
> comporta de un modo que no entiendo:
>
> ------------------------------------------------------------------------
> class A:
>    def __init__(self, foo = []):
>        self.bar = foo
>
> a = A()
> a.bar.append(6)
> b = A()
> -----------------------------------------------------------------------
>
> Ahora resulta que tanto `a.bar' como `b.bar' tienen el mismo valor: `[6]'.
> ¿No tendria que ser `b.bar == []' ?
>
> Un saludo y gracias.
> --
> Ricardo
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es