[pyar] xDuda con como acceder a un método de un objeto dentro de una lista

XLJ xlj xlj707 en gmail.com
Mar Mar 8 17:41:03 ART 2016


COMO SE define el __str__ en la calse Libro ???? 

ya logre listar todo, mi error era que en cada clase hija estaba  escribiendo nuevamente el método showInfo y esto no era necesario ya que la clase padre Ejemplar ya cuenta con el. 

MacBook-Pro-de-X:clases xlj707$ python3 estanteriaMaterial.py 
titulo:  Alicia en el pais de las maravillas
anio:  1999
autor:  lucson marz
paginas:  200
editorial:  MCgraw Hill
None
titulo:  Peter Pan
anio:  1985
autor:  J. M. Barrie
paginas:  206
editorial:  A Millennium Fulcrum Edition
None
titulo:  Oliver tweest
anio:  1855
autor:  Charles Dikenson
paginas:  120
editorial:  Porrua
None
titulo:  La Odisea
anio:  1530
autor:  Homero
paginas:  950
editorial:  Porrua
None
titulo:  La iliada 
anio:  1532
autor:  Homero
paginas:  1300
editorial:  Porrua
None
titulo:  La hojarasca
anio:  1960
autor:  Gabriel Garcia Marquez
paginas:  180
editorial:  Editorial Latina
None


AHORA LO QUE NO PUEDO HACER ES INGRESAR al getter propio de libro que es getCodigoLibro(): return self.__codigolibro , el cual es un atributo propio solo de la clase Libro



> On Mar 8, 2016, at 2:34 PM, Tomas Zulberti <tzulberti en gmail.com> wrote:
> 
> 
> 
> 2016-03-08 17:24 GMT-03:00 XLJ xlj <xlj707 en gmail.com <mailto:xlj707 en gmail.com>>:
> # en este modulo tendre la estanteria de libros (listas)
> from libro import Libro
> 
> # 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
> 
> 
> # test de vaciado de la lista
> def listar():
>     for object in libros:
>     	print(object)
> 
> 
> 
> 
> listar()
> 
> MacBook-Pro-de-X:clases xlj707$ python3 estanteriaMaterial.py 
> <libro.Libro object at 0x10133a4a8>
> <libro.Libro object at 0x10133a4e0>
> <libro.Libro object at 0x10133a518>
> <libro.Libro object at 0x10133a588>
> <libro.Libro object at 0x10133a860>
> <libro.Libro object at 0x10133a8d0>
> 
> 
> 
> Eso es porque no definiste el __str__ en la clase libro. 
> 
> 
>  
>  Y USANDO EL CODIGO ASI : 
> 
> # en este modulo tendre la estanteria de libros (listas)
> from libro import Libro
> 
> # 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
> 
> 
> # test de vaciado de la lista
> def listar():
>     for object in libros:
>     	print(object.showInfo())
> 
> 
> 
> 
> listar()
> 
> MacBook-Pro-de-X:clases xlj707$ python3 estanteriaMaterial.py 
> Traceback (most recent call last):
>   File "estanteriaMaterial.py", line 27, in <module>
>     listar()
>   File "estanteriaMaterial.py", line 22, in listar
>     print(object.showInfo())
>   File "/Users/xlj707/Documents/Misproyectitos-python/ArchivoJson/clases/libro.py", line 14, in showInfo
>     print("titulo: ", self.__titulo)
> AttributeError: 'Libro' object has no attribute '_Libro__titulo'
> MacBook-Pro-de-X:clases xlj707$ 
> 
> 
> 
> 
> Lo que te dice ese mensaje es que la clase "Libro" no tiene el attributo de __titulo no tiene el atributo que por ahi pertence a Ejemplar, pero que es "privado" y por lo tanto no lo podes acceder.
> 
> Para accederlo desde libro deberias hacer algo como esto:
> 
> 
> print("titulo", self._Ejemplar__titulo)
>  
>> On Mar 8, 2016, at 2:15 PM, Tomas Zulberti <tzulberti en gmail.com <mailto:tzulberti en gmail.com>> wrote:
>> 
>> 
>> 
>> 2016-03-08 17:05 GMT-03:00 XLJ xlj <xlj707 en gmail.com <mailto:xlj707 en gmail.com>>:
>> #clase libro 
>> 
>> from 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(): 
>>       return self.__codigolibro
>> 
>>    def showInfo(self):
>>       print("titulo: ", self.__titulo)
>>       print("anio: ", self.__anio)
>>       print("autor: ", self.__autor)
>>       print("paginas: ", self.__paginas)
>>       print("editorial: ", self.__editorial)
>>       print("codigo de libro: ", self.__codigolibro)
>> 
>> 
>> 
>> # en este modulo tendre la estanteria de libros (listas)
>> from libro import Libro
>> 
>> # 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
>> 
>> 
>> # test de vaciado de la lista
>> def listar():
>>     for object in libros:
>> 
>> 
>> 
>> 
>> 
>> listar()
>> 
>> MI DUDA ES LA SIGUIENTE como puedo hacer uso del método showInfor() que es el encargado de listar todas las propiedades del objeto tipo Libro, esto dentro de mi ciclo for 
>> ya intente con def listar(): 
>> 	for object in libros 
>> 		print(object.showInfo()) 
>> sin embargo esto me da error !! 
>> 
>> 
>> 
>> Estaria bueno que pongas el mensaje de error que te aparece. 
>> Por ejemplo, tu codigo corre en Python 3. 
>> 
>> Sin embargo, lo que queres hacer es lo siguiente:
>> 
>> for object in libros:
>>     object.showInfo()
>> 
>> No es necesario hacer un print de object.showInfo(), porque el mismo ya lo imprime
>> 
>>  
>> 
>> quiero saber como puedo lograr esto aquí en python ya que en java es totalmente posible (haciendo uso del metodo toString) 
>> 
>> 
>> En python existe un magic method llamado __str__ (http://www.rafekettler.com/magicmethods.html#representations <http://www.rafekettler.com/magicmethods.html#representations>)
>> 
>>  
>> de antemano gracias!! espero que alguien me pueda orientar 
>> 
>> _______________________________________________
>> 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 <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 <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 <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/>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160308/3c09c3f1/attachment-0001.html>


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