Python - Problema con pickle y objetos

 
Vista:

Problema con pickle y objetos

Publicado por Augusto (1 intervención) el 08/01/2019 00:39:44
tengo el siguiente codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pickle
class mes():
	lista_dias = list(range(0,31))
	def __init__(self):
		for x in range(0,31):
			self.lista_dias[x]=True
class anio():
	lista_meses = list(range(0,12))
	def __init__(self):
		for x in range(0,12):
			self.lista_meses[x]=mes()
class calendario():
	lista_anios =list (range(0,100))
	def __init__(self):
		for x in range(0,100):
			self.lista_anios[x]=anio()

cuando intento hacer la persistencia primero hago el guardado mediante:

1
2
3
Archivo=open("archivo.dat","wb")
pickle.dump(micalendario,Archivo)
Archivo.close()

hasta ahi bien, genero el archivo, pero cuando quito esa parte de codigo y coloco la siguiente para recuperar el objeto guardado mediante:

1
2
3
Archivo=open("archivo.dat","rb")
micalendario=pickle.load(Archivo)
Archivo.close()

y por ejemplo hacer este print de prueba:

1
print(micalendario.lista_anios[1].lista_meses[1].lista_dias[1])

me da este error:

print(micalendario.lista_anios[1].lista_meses[1].lista_dias[1])
AttributeError: 'int' object has no attribute 'lista_meses'


espero me puedan ayudar, no le encuentro la vuelta
muchas gracias!
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
sin imagen de perfil
Val: 18
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Problema con pickle y objetos

Publicado por Yidu (19 intervenciones) el 10/01/2019 19:58:07
He mirado un poco por encima el codigo. Y supongo que estaras dando los primeros pasos en POO. No creo que sea problema del modulo pickle. A mi esta linea no me parece muy "pythonica":

1
print(micalendario.lista_anios[1].lista_meses[1].lista_dias[1])



Desde luego a mi no me gusta encadenar atributos de distintas clases. Yo te recomentadira que estudiaras la herencia de clases. E incluso la herencia multiple. Aunque esta se puede volver un lio si no esta todo el script bien organizado.

Creo que lo logico seria crear la clase padre calendario. Y de esta ir creando una herencia. Espero haberte despejado algunas dudas.
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
Imágen de perfil de abzer0x
Val: 386
Bronce
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Problema con pickle y objetos

Publicado por abzer0x (1 intervención) el 11/01/2019 14:02:13
Hola hice algunas modificaciones en tu código, espero te sirva. Nos comentas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pickle
class mes():
	def __init__(self):
		self.lista_dias = [True for _ in range(31)]
class anio():
	def __init__(self):
		self.lista_meses = [mes() for _ in range(12)]
class calendario():
	def __init__(self):
		self.lista_anios = [anio() for x in range(100)]
 
micalendario=calendario()
archivo=open("archivo.dat", "wb")
pickle.dump(micalendario, archivo)
archivo.close()
 
archivo=open("archivo.dat", "rb")
micalendario=pickle.load(archivo)
archivo.close()
print(micalendario.lista_anios[1].lista_meses[1].lista_dias[1])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar