Python - Problema con lista dentro de un objeto

 
Vista:

Problema con lista dentro de un objeto

Publicado por huaskatras (2 intervenciones) el 23/01/2012 15:22:42
Estimados, este es mi primer mensaje en el foro y les cuento que empecé hace muy poco a programar con Python. Si bien es un poco difícil de explicar mi problema haré lo mejor posible:
El objetivo del script es leer un archivo de texto "demanda.dat" con datos mensuales de la demanda de clientes y guardarlos en una estructura conveniente para trabajar estos datos después, para esto:
- Hice una clase "Cliente" que tiene una propiedad llamada "demanda" que es una lista.

- Dentro de la clase "Cliente" hice un método que agrega una linea a la lista "demanda" con una estructura tipo [año,mes,suministrador, demanda_del_mes], esto lo hago a través de Cliente.demanda.append(0,0,"",0) para luego asignar los valores correctos con una asignación como Cliente.demanda[indice][0] = año, etc

- Tambien me hice una lista "Clientes" en donde voy agregando cada instancia de la clase cliente que voy creando. Tambien llevo cuenta de un diccionario con los nombres de los clienes como clave y su posicion en la lista "Clientes" para obtener un rapido acceso. Esto se hace cada vez que se instancia a la clse "Clientes" pues lo puse en def __init__(self): de la clase

Lo que hace el script es lo siguiente:
- inicia un bucle while 1: que lee todas las lineas de archivo
- Cuando encuentra un cliente, revisa si está en el diccionario. Si está en el diccionario asigno a
O_cliente = Clientes[indice_cliente]
donde indice_cliente = diccionario_Clientes[nombrecliente] ....
aplico el metodo de la clase cliente
O_cliente.metodo_agrega_linea_demanda(.....)

- Cuando el cliente no está en el diccionario instancio la clase Cliente con
O_cliente = Cliente(nom_cliente,........)
y agrego una linea con el metodo de la clase:
O_cliente.metodo_agrega_linea_demanda(....)

Funciona todo más menos bien. El problema es que para cada Cliente en la lista de Clientes su porpiedad demanda es una lista con la demanda de todos los clientes.

No se cual es el problema, porque se supone que siempre cambio el objeto al cual apunta O_cliente y es a este objeto al estoy aplicando el método para agregar una fila...

Espero que se haya entendido el problema, y de antemano agradezco su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con lista dentro de un objeto

Publicado por huaskatras (2 intervenciones) el 23/01/2012 17:53:51
Estimados:

Parece que encontré la solución, inicialmente el metodo init de la clase era alo así:
def __init__(self,nombre,....,demanda[]):
self.nombre = nombre
....
self.demanda = demanda

lo cambié por algo así:

def __init__(self,nombre,...) #sin declarar demanda = []
self.nombre = nombre
......
self.demanda = []

Al parecer era un problema que con el atributo demanda de cualquier instancia de la clase apuntaba a la misma lista.... espero le sirva a otra persona.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar