[pyar] xDuda con como acceder a un método de un objeto dentro de una lista
fisa
fisadev en gmail.com
Mar Mar 8 20:29:43 ART 2016
On Tue, Mar 8, 2016 at 5:41 PM XLJ xlj <xlj707 en gmail.com> wrote:
> 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>:
>
>> # 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> wrote:
>>
>>
>>
>> 2016-03-08 17:05 GMT-03:00 XLJ xlj <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)
>>
>>
>>
>>> de antemano gracias!! espero que alguien me pueda orientar
>>>
>>> _______________________________________________
>>> 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
>>
>
> _______________________________________________
> 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
Buenas! para definir el método __str__, definilo como a cualquier método
normal:
class Libro(Ejemplar):
# ... resto de tu codigo ...
def __str__(self):
return self.getTitulo() # o lo que prefieras que se devuelva
Pero me tomo el tiempo de darte otros consejos que me parecen importantes
sobre tu código:
1) No uses object como nombre de variable. Ya existe algo que es object, y
al usarlo como nombre de variable lo estás pisando, cosa que no está buena.
Mejor algo como esto:
for libro in libros:
...
2) No hace falta que definas getters para eso que hiciste! es mucho código
al cuete, que no te da ninguna ventaja y te complica las cosas. No es la
forma que se acostumbra a hacer en python además, para nada.
Esta es la forma en la que veo que lo hacés:
class Persona:
def __init__(self, nombre):
self.__nombre = nombre
def getNombre():
return self.__nombre
p = Persona('fisa')
print(p.getNombre())
Y esta sería la forma adecuada normalmente en python:
class Persona:
def __init__(self, nombre):
self.nombre = nombre
p = Persona('fisa')
print(p.nombre)
Fijate que es bastante más legible y simple. Recordá que menos código
significa muchas ventajas (menos chances de error, más fácil de entender y
debuguear, etc).
Solo usá getters si necesitás meter lógica especial adentro.
Saludos!
--
--
fisa - Juan Pedro Fisanotti
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160308/8e52539d/attachment-0001.html>
Más información sobre la lista de distribución pyar