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

Ezequiel Trapani etrapani04 en gmail.com
Mie Mar 9 22:06:28 ART 2016


Si, yo creo que esta bien definido (no tengo tanta experiencia en python).
En este link, encontré la solución:

http://stackoverflow.com/questions/12448175/confused-about-str-in-python

Aparentemente el str funciona cuando quieres hacer print Libro, pero si vos
querés mostrar una lista de libros, el método que llama de cada libro que
contiene es __repr__. Este método es utilizado para hacer la representación
oficial de un objeto( este link tiene bien la explicación -->
http://satran.in/2012/03/14/python-repr-str.html). Por lo que entiendo se
puede definir igual que el método __Str__ o como dice en el primer link
sobreescribirlo de la siguiente forma al final de la definición de la clase:

__repr__ = __str__

De todas maneras es mi humilde opinion sin experiencia, puedo estar
errado, no lo probe nunca me fio por lo que lei.

Saludos.




2016-03-09 21:38 GMT-03:00 XLJ xlj <xlj707 en gmail.com>:

> 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> 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
>> 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
>>
> _______________________________________________
> 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
>
>
>
> _______________________________________________
> 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
>



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


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