Persistencia para una variable

Germán Carrera gcarrera en cnb.uam.es
Mar Feb 27 14:01:25 CET 2007


Hola Chema,

Gracias por la ayuda, el caso es un poco enrevesado y para buscar una 
solución, debido a que no puedo modificar el código que no forma parte 
de mi módulo hice una reproducción con un pequeño ejemplo de lo que pasaba .

Esto es a grandes rasgos, en cada iteración se creaba una instancia 
nueva de "test" perdiéndose el valor de las propiedades de la clase 
generada anteriormente, añadiendo el global (en este caso que el objeto 
se instancia en cada iteración) se acaban más o menos los problemas.

Si pudiera accader al resto, sólo haría falta quitar test_=test() de 
dentro del for y ponerlo encima.

Saludos.

#!/usr/bin/python

carajo=[6,7]
class test:
    def __init__(self):
        None
    def algofunc(self,iter):
        global carajo
        for n in range(90):
            if iter==5:
                carajo=[2,3,3,4,5,3,4,3]
        print carajo

def main():
    for n in range(20):
        test_=test()
        test_.algofunc(n)
if __name__ == "__main__":
    main()



Chema Cortes wrote:
> Germán Carrera escribió:
>
>> __init__  añadir
>> self.plan=[]
>>
>> Y substituir en el caso del código de abajo.
>> pero en este caso la lista self.plan pierde su valor en cada una de 
>> las iteraciones.
>
> Aunque un poco más claro, no entiendo bien qué abarcan cada una de 
> esas iteracciones. El atributo plan no debería perder su valor a no 
> ser que lo que realmente estés haciendo es crear nuevas instancias en 
> lugar de reutilizar la misma.
>
> Dime si me equivoco, pero creo que lo que quieres es que varias 
> instancias compartan el valor de un mismo atributo. Si fuera así, lo 
> que estás necesitando es un "atributo de clase". En lugar de iniciar 
> 'plan' en el método __init__, ponlo fuera de los métodos:
>
> class MyIter:
>   plan=[]
>
>   def __init__(self):
>    ....
>
>   def myiter(self):
>     MyIter.plan.append(task)
>
>
> (También se podrías acceder como "self.plan", pero conviene ser 
> explícito y hacer ver que es un atributo de la clase)
>




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