[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