Foros del Web » Programando para Internet » Python »

variables globales en clases

Estas en el tema de variables globales en clases en el foro de Python en Foros del Web. Hola, Estoy haciendo un jueguillo en python, y me tope con un problema que nunca crei fuera a dar problemas jeje. Como le hago para ...
  #1 (permalink)  
Antiguo 21/05/2009, 09:28
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
variables globales en clases

Hola,

Estoy haciendo un jueguillo en python, y me tope con un problema que nunca crei fuera a dar problemas jeje.

Como le hago para llamar a una varible de una clase en otra clase, y que su valor perdure?

Es decir, quiero declarar una variable en una clase, luego modificarla en otro, y luego en otra clase, volver a modificar, pero tomando en cuenta la modificacion pasada.

De momento, hago algo asi:


Código:
class Counter():
counter = 0
def _init_(self):
  pass


class Mod1():
  #modifico el de counter  de la clase Counter()
  def foo(self):
   instance = Counter()
   instance.counter + = 1

class Mod2():
  # aqui ya llame primero a Mod1()
  def foo(self):
  instance = Counter()
  if instance.counter >= 1:
     instance.counter = 2  # nunca entra al if
Que me esta faltando para que el valor cambiado sea guardado a travesz de varias clases?

saludos,
  #2 (permalink)  
Antiguo 22/05/2009, 10:27
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: variables globales en clases

instance.counter + = 1

Eso debería darte error de sintaxis

El operador debería ser

instance.counter += 1


Saludos.
  #3 (permalink)  
Antiguo 22/05/2009, 19:48
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: variables globales en clases

Cita:
Iniciado por alvlin Ver Mensaje
instance.counter + = 1

Eso debería darte error de sintaxis

El operador debería ser

instance.counter += 1


Saludos.
Ah si, lo que pasa es que hice una "reduccion" de mi codigo porque es mucho mas largo que eso, y no probe lo que postee. Pero ahi esta la idea.

En fin, sabes como solucionar mi problema?
No tengo ningun error de sintaxis ni en tiempo de ejecucion. Simplemente no hace lo que quiero que haga; que es sumar la variable en base a lo que ya se habia sumado.
¿Alguna idea?
  #4 (permalink)  
Antiguo 22/05/2009, 22:58
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: variables globales en clases

Lo que sucede es que estás creando dos objetos de clase Counter, por lo que cada uno tiene su atributo counter que nada tiene que ver con el del otro.

Para lograr lo que querés hay dos formas:
1.- Utilizar un Singleton
2.- Utilizar atributos de clase.

Para la forma 1, que es la más complicada, prefiero que la Wikipedia sea quien de la explicación.

Para la forma dos, te recomiendo este enlace que encontré sobre atributos de clase en Python. Básicamente resulta en que las clases en Python pueden tener sus propios atributos, que se acceden directamente como "nombredeClase.atributo". Una vez que creas un objeto de esa clase, el objeto tiene un atributo del mismo nombre pero no es el mismo, es una copia propia del objeto.

Por lo que, en este caso, tanto desde Mod1 como desde Mod2 deberías ser capaz de hacer

Counter.counter += 1;

modificando así el atributo de la clase. Pero cuidado: por lo mencionado antes de que los atributos que ganan los objetos son copias de los de la clase, modificar el atributo de la clase no hace que los objetos vean el cambio (como se demuestra en el enlace que te pasé antes), como sucedería en Java con atributos estáticos.
Para que desde cualquier lugar puedas manejar un objeto de clase Counter, con acceso a través del objeto al atributo counter, deberías implementar un singleton.


Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:14.