Domingo 17 de Noviembre de 2024, 18:42
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
Python
(Moderador:
arielb
) »
Problema con lista dentro de un objeto
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problema con lista dentro de un objeto (Leído 1449 veces)
huaskatras
Nuevo Miembro
Mensajes: 2
Problema con lista dentro de un objeto
«
en:
Lunes 23 de Enero de 2012, 15:44 »
0
Estimados:
Parto contándoles que soy totalmente noob en Python, de hecho mi única experiencia como programado son algunas macros en VBA.
Querio leer datos de clientes de un archivo llamado "datos.dem" y para ello me hice una clase Cliente que es mas menos así:
Código: Python
Clientes
[
]
dic_Clientes
{
}
class
Cliente:
def
__init__
(
self
,
nombre
,
suministrador
=
""
,
tipo
=
""
,
demanda_cliente
=
[
]
,
barra
=
""
,
curva
=
0
)
:
self
.
nombre
=
nombre
self
.
suministrador
=
suministrador
self
.
demanda_cliente
=
demanda_cliente
self
.
barra
=
barra
self
.
curva
=
curva
self
.
tipo
=
tipo
dic_Clientes
[
nombre
]
=
len
(
Clientes
)
# Diccionario con nombre de cliente como clave y con indice Clientes[] como valor
Clientes.
append
(
self
)
def
__str__
(
self
)
:
return
self
.
nombre
def
agrega_lineademanda
(
self
,
ano
,
mes
,
suministrador
,
pot_media
,
f_carga
)
:
indice
=
len
(
self
.
demanda_cliente
)
self
.
demanda_cliente
.
append
(
[
0
,
0
,
""
,
0
,
0
,
0
]
)
self
.
demanda_cliente
[
indice
]
[
0
]
=
ano
self
.
demanda_cliente
[
indice
]
[
1
]
=
mes
self
.
demanda_cliente
[
indice
]
[
2
]
=
suministrador
self
.
demanda_cliente
[
indice
]
[
3
]
=
pot_media
self
.
demanda_cliente
[
indice
]
[
4
]
=
f_carga
indice_curva
=
dic_Curvas
[
str
(
self
.
curva
)
]
indice_mes
=
mes -
1
hora_b1
=
float
(
Hora_Bloques
[
indice_mes
]
[
0
]
)
hora_b2
=
float
(
Hora_Bloques
[
indice_mes
]
[
1
]
)
hora_b3
=
float
(
Hora_Bloques
[
indice_mes
]
[
2
]
)
hora_b4
=
float
(
Hora_Bloques
[
indice_mes
]
[
3
]
)
curva_b1
=
float
(
Curvas
[
indice_curva
]
.
Bloque1
[
indice_mes
]
)
curva_b2
=
float
(
Curvas
[
indice_curva
]
.
Bloque2
[
indice_mes
]
)
curva_b3
=
float
(
Curvas
[
indice_curva
]
.
Bloque3
[
indice_mes
]
)
curva_b4
=
float
(
Curvas
[
indice_curva
]
.
Bloque4
[
indice_mes
]
)
demandames
=
float
(
pot_media
)
/
float
(
f_carga
)
*
(
curva_b1*hora_b1+curva_b2*hora_b2+curva_b3*hora_b3+curva_b4*hora_b4
)
self
.
demanda_cliente
[
indice
]
[
5
]
=
demandames
Luego hice una función para obtener los clientes desde un archivo, la función es más menos así (Las curvas y las horas_bloques están bien definidas en otras listas y diccionarios):
Código: Python
def
ObtenerClientes
(
)
:
ObtenerCurvas
(
)
f_clientes
=
open
(
"datos.dem"
,
"r"
)
while
1
:
s
=
f_clientes.
readline
(
)
if
s
==
""
:
f_clientes.
close
(
)
return
if
s
==
"
\n
"
:
continue
s_clientes
=
s.
strip
(
)
split_clientes
=
s_clientes.
split
(
)
if
split_clientes
[
0
]
==
"consfut"
:
#Linea que marca la introducción de consumos
while
1
:
s2
=
f_clientes.
readline
(
)
s2_c
=
s2.
strip
(
)
if
s2
==
"find"
or
s2
==
""
:
f_clientes.
close
(
)
return
if
s2
==
'
\n
'
:
continue
split_s2
=
s2_c.
split
(
)
if
split_s2
[
0
]
==
"/*"
or
split_s2
[
0
]
==
"consumo"
:
continue
#Si es comentario continuo
if
split_s2
[
0
]
==
"find"
:
f_clientes.
close
(
)
return
cliente
=
split_s2
[
0
]
ano
=
int
(
split_s2
[
1
]
)
mes
=
int
(
split_s2
[
2
]
)
pot_media
=
float
(
split_s2
[
5
]
)
f_carga
=
float
(
split_s2
[
6
]
)
curva
=
int
(
split_s2
[
7
]
)
barra
=
split_s2
[
10
]
suministrador
=
split_s2
[
11
]
tipo
=
split_s2
[
19
]
if
not
dic_Clientes.
has_key
(
cliente
)
:
O_cliente
=
Cliente
(
cliente
)
O_cliente.
tipo
=
tipo
O_cliente.
barra
=
barra
O_cliente.
curva
=
curva
O_cliente.
agrega_lineademanda
(
ano
,
mes
,
suministrador
,
pot_media
,
f_carga
)
elif
dic_Clientes.
has_key
(
cliente
)
:
indice_Clientes
=
dic_Clientes
[
cliente
]
O_cliente
=
Clientes
[
indice_Clientes
]
O_cliente.
agrega_lineademanda
(
ano
,
mes
,
suministrador
,
pot_media
,
f_carga
)
El problema es que al consultar por ejemplo la demanda de 1 Cliente
demanda_cliente = Clientes[0].demanda_cliente
resulta que esta demanda guarda las filas de demanda de todos los clientes... no entiendo cual puede ser el error si aplico el método sobre el objeto O_cliente.agrega_lineademanda(......) y O_cliente lo estoy cambiando cada vez.
Espero me puedan ayudar.
Tweet
huaskatras
Nuevo Miembro
Mensajes: 2
Re:Problema con lista dentro de un objeto
«
Respuesta #1 en:
Lunes 23 de Enero de 2012, 18:01 »
0
Estimados:
Creo que lo solucioné... la definición de __init__ la estaba haciendo como:
Código: Python
class
Cliente:
def
__init__
(
self
,
nombre
,
suministrador
=
""
,
tipo
=
""
,
demanda_cliente
[
]
,
barra
""
,
curva
=
0
)
self
.
nombre
=
nombre
self
.
suministrador
=
suministrador
self
.
demanda_cliente
=
demanda_cliente
#etc
La solución fue definir así:
Código: Python
class
Cliente:
def
__init__
(
self
,
nombre
,
suministrador
=
""
,
tipo
=
""
,
barra
""
,
curva
=
0
)
self
.
nombre
=
nombre
self
.
suministrador
=
suministrador
self
.
demanda_cliente
=
[
]
#etc
Al parecer de la primera forma, el atributo demanda_cliente de todos las instancias de la clase Cliente apuntaban a la misma lista....
Espero estar en lo correcto y que a alguien más le sirva.
Saludos
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
Python
(Moderador:
arielb
) »
Problema con lista dentro de un objeto