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