[pyar] Serializando una lista de objetos con pickle problema en la impresión del archivo serializado

XLJ xlj xlj707 en gmail.com
Mie Mar 9 21:38:42 ART 2016


SI TENGO DEFINIDO EL METODO STR EN LA CLASE Ejemplar QUE ES LA CLASE DE LA CUAL HEREDA LA CLASE Libro 



mi clase Libro 

from clases.ejemplar import Ejemplar 

class Libro(Ejemplar): 
	def __init__(self, titulo, anio, autor, paginas, editorial, codigoLibro): 
		Ejemplar.__init__(self, titulo, anio, autor, paginas, editorial) #super
		self.__codigolibro = codigoLibro #atributo adicional propio de esta clase 

	def getCodigoLibro(self): 
		return self.__codigolibro


mi clase Ejemplar 

#clase ejemplar de la cual sera la clase padre 
class Ejemplar: 
	def __init__(self, titulo, anio, autor, paginas, editorial): 
		self.__titulo = titulo
		self.__anio = anio
		self.__autor = autor
		self.__paginas = paginas 
		self.__editorial = editorial 
		
	def getTitulo(self):
		return self.__titulo

	def getAnio(self): 
		return self.__anio

	def getAutor(self): 
		return self.__autor

	def getPaginas(self): 
		return self.__paginas

	def getEditorial(self): 
		return self.__editorial
		
	def __str__(self): 
		cadena = self.__titulo+','+str(self.__anio)+','+self.__autor+','+str(self.__paginas)+','+self.__editorial
		return cadena

	#def __str__(self):
	 # 	cadena = self.getTitulo() +","+ self.getAnio() +","+ self.getAutor() +","+ self.getPaginas() +","+ self.getEditorial()
				
	  # 	 return cadena

#ESTA BIEN ECHO MI METODO STRING O NO ? 




> On Mar 9, 2016, at 6:34 PM, Ezequiel Trapani <etrapani04 en gmail.com> wrote:
> 
> A mi criterio efectivamente te deserializa y te genera objetos de tipo libro, lo que te falta es el metodo string de libro para q te muestre el contenido y no la dirección de memoria.
> Cuando vos declaras un objeto de cualquier tipo en cualquier lenguaje se le asigna en tiempo de ejecución un espacio de memoria, si vos haces print de la clase temuestra la dirección,  lo que se hace se declara el metodo __str__(python) tostring (java) etc donde podes le definis como queres q te represente la clase en un string,  de esta forma podes mostrar el contenido de la clase libro en este caso.
> 
> Saludos
> 
> El mar 9, 2016 7:01 p.m., "XLJ xlj" <xlj707 en gmail.com <mailto:xlj707 en gmail.com>> escribió:
> # en este modulo tendre la estanteria de libros (listas)
> from clases.libro import Libro
> import pickle 
> # titulo, anio, autor, paginas, editorial, codigoLibro
> 
> 
> 
> # llenado de la estanteria
> lib1 = Libro("Alicia en el pais de las maravillas", 1999, "lucson marz", 200, "MCgraw Hill", "AHSBCr31")
> lib2 = Libro("Peter Pan", 1985, "J. M. Barrie", 206, "A Millennium Fulcrum Edition", "HALSDF232")
> lib3 = Libro("Oliver tweest", 1855, "Charles Dikenson", 120, "Porrua", "ASDFAS235")
> lib4 = Libro("La Odisea", 1530, "Homero", 950, "Porrua", "ASDFASDF323")
> lib5 = Libro("La iliada ", 1532, "Homero", 1300, "Porrua", "ADSFASD9032")
> lib6 = Libro("La hojarasca", 1960, "Gabriel Garcia Marquez", 180, "Editorial Latina", "ADF3235ASD")
> 
> libros = [lib1, lib2, lib3, lib4, lib5, lib6]  # 6 libros
> 
> # vaciado de la lista
> def listarLibros():
>     for object in libros:
>     	print(object, "\n", object.getCodigoLibro() ) 
>     menu()
> 
> def eliminarTitulo(): 
> 	print("eliminar titulo")
> 	menu() 
> def agregarTitulo(): 
> 	#para agregar un titulo primero creamos una nueva instancia de Libro 
> 	#para esto pedimos cada uno de los atributos requeridos 
> 	titulo = input("cual es el titulo: ")
> 	anio = input("ingresa el anio: ")
> 	autor = input("ingresa el autor: ")
> 	paginas = input("cuantas pagias tiene el libro? ")
> 	editorial = input("de que editorial es? ")
> 	claveLibro = input("ingresa un codigo alfanumerico para el libro: ")
> 
> 
> 	lib7 = Libro(titulo, anio, autor, paginas, editorial, claveLibro)
> 	libros.append(lib7)
> 	#ahora convertimos el objeto python en JSON 
> 	
> 	
> 	print("libro agregado con exito!! ")
> 
> 	menu()
> 
> def guardarCambiosEnArchivoPickle(): 
> 
> 	print("realizando serializacion pickle.......")
> 	with open('libros.pickle','wb') as f: 
> 		pickle.dump(libros, f,protocolo=0,import=True*)
> 	print("cambios guardados con exito !")
> 
> 	menu()
> 
> def leerArchivoPickle(): 
> 	with open('libros.pickle','rb') as f: 
> 		libros = pickle.load(f,import=True*,encoding="ASCII"*,error="strict"*)
> 		print(libros) 
> 		print("\n")
> 
> 	menu()
> 
> def salir(): 
> 	print("salir.....")
> 
> 
> def menu(): 
> 	opcion = input("Operaciones: \n\t 1) listar material \n\t 2) eliminar Titulo \n\t 3) agregar titulo \n\t 4) guardar Cambios En Archivo Pickle \n\t 5) leer archivo pickle \n\t 6) salir ")#todos los metodos manipularan archivos 
> 	#emulamos switch 
> 	operaciones = {'1':listarLibros, '2':eliminarTitulo, '3':agregarTitulo, '4':guardarCambiosEnArchivoPickle, '5':leerArchivoPickle, '6':salir}
> 
> 	operaciones[opcion]()
> 
> 
> 
> 
>     
> menu()
> 
> EL PROBLEMA ES QUE DESPUES DE SERIALIZAR EL CONTENIDO QUE LEEO CON LA FUNCION leerArchivoPickle()  es el siguiente: 
> 
> [<clases.libro.Libro object at 0x10118a320>, <clases.libro.Libro object at 0x10118a358>, <clases.libro.Libro object at 0x10118a1d0>, <clases.libro.Libro object at 0x10118a240>, <clases.libro.Libro object at 0x10118a2b0>, <clases.libro.Libro object at 0x101194c88>]
> 
> 
> ES DECIR NO APARECE EN UN FORMATO LEGIBLE PARA EL SER HUMANO CADA UNO DE LOS OBJETOS 
> ALGUIEN ME PUEDE DECIR A QUE SE DEBE ESTO Y COMO LO PUEDO CORREGIR? DE ANTEMANO GRACIAS POR SU APOYO Y COMPRESION 
> 
> _______________________________________________
> pyar mailing list pyar en python.org.ar <mailto:pyar en python.org.ar>
> http://listas.python.org.ar/listinfo/pyar <http://listas.python.org.ar/listinfo/pyar>
> 
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/ <http://www.python.org.ar/>
> 
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar <http://www.usla.org.ar/>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
> 
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
> 
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160309/8ae0b3d6/attachment-0001.html>


Más información sobre la lista de distribución pyar