viernes, marzo 30, 2007

Creación implicita de atributos

Al modificar un fichero de un compi de curro, me llamó la atención que él creaba las variables de instancia como si fueran de clase. Y le funcionaba, cosa que me estrañó mucho.

Indagando un poco al respecto ya se porqué. Antes de nada un ejemplo:


class B:
b = "B"

class C(B):
def __init__(self,v):
self.b = v


b1 = B()
b2 = B()
c = C("c")

#--- Valores originales
print b1.b,b2.b,c.b

#--- Cambiamos la variable de clase
B.b = "BB"
print b1.b,b2.b,c.b

#---- Cambiamos variable de instancia de objeto de tipo B
b1.b = "B"
print b1.b,b2.b,c.b



Que nos proporciona la salida:

B B c
BB BB c
B BB c


El ejemplo anteiror nos muestra que cuando referenciamos una variable de instancia que no existe, pero si como clase, automáticamente se crea una variable de instancia con el valor de la variable de clase.

No hay comentarios: