[pyar] Herencia en Python

Ezequiel Trapani etrapani04 en gmail.com
Dom Feb 28 12:25:20 ART 2016


Si, esta funcionando joya. Gracias nuevamente Ignacio, ya quiero terminar
el curso para hacer cosas con python 3 porque es mas natural como resolver
esas cuestiones ja.

Saludos!

2016-02-28 11:49 GMT-03:00 Ignacio Rossi <rossi.ignacio en gmail.com>:

> El 28 de febrero de 2016, 11:39, Ezequiel Trapani <etrapani04 en gmail.com>
> escribió:
>
>> Teniendo en cuenta lo que me indicaste. Cada vez que quiero llamar a un
>> método de la clase padre tiene que ser así:
>>
>> ClasePadre.metodo(self,parametros)
>>
>> Porque tengo métodos redefinidos en los hijos pero necesito llamar al del
>> padre.
>>
>
> Exacto, con clases que no heredan de object eso anda y tengo entendido que
> se hace así.
> Si heredan de object también anda, pero super es más claro y le deja el
> laburo de resolver la clase padre a python.
>
>
>>
>> 2016-02-28 11:23 GMT-03:00 Ezequiel Trapani <etrapani04 en gmail.com>:
>>
>>> Gracias Ignacio, era ese el problema.
>>>
>>>
>>>
>>> 2016-02-28 11:10 GMT-03:00 Ignacio Rossi <rossi.ignacio en gmail.com>:
>>>
>>>>
>>>>
>>>> El 28 de febrero de 2016, 11:06, Ezequiel Trapani <etrapani04 en gmail.com
>>>> > escribió:
>>>>
>>>>> Gracias por responder Ignacio, exactamente como decís vos tengo que
>>>>> usar python 2.7. En ese caso como hago el llamado al constructor del padre?
>>>>>
>>>>
>>>> Tenés que elegir explicitamente a que clase corresponde el metodo que
>>>> queres usar, y llamarlo con el self en los parametros:
>>>>
>>>>     X.__init__(self, name, address)
>>>>
>>>>
>>>>
>>>>>
>>>>> 2016-02-28 11:02 GMT-03:00 Ignacio Rossi <rossi.ignacio en gmail.com>:
>>>>>
>>>>>> Hola Ezequiel;
>>>>>>
>>>>>> El 28 de febrero de 2016, 10:40, Ezequiel Trapani <
>>>>>> etrapani04 en gmail.com> escribió:
>>>>>>
>>>>>>> Buenos días,
>>>>>>>
>>>>>>> Estoy haciendo un curso sobre python y tengo una actividad en la que
>>>>>>> tengo que aplicar POO y usar herencia. El problema es el siguiente, tengo
>>>>>>> una clase X y una clase Y que hereda de X. Cuando defino el constructor de
>>>>>>> Y, tengo que llamar al constructor de X. El problema es que me sale el
>>>>>>> siguiente error:
>>>>>>>
>>>>>>> Traceback (most recent call last):
>>>>>>>   File "submission.py", line 64, in __init__
>>>>>>>     super(self.__class__, self).__init__(name,desired_species)
>>>>>>> TypeError: must be type, not classobj
>>>>>>>
>>>>>>> La definición del constructor de la clase Y es la siguiente:
>>>>>>>
>>>>>>>
>>>>>>> class Y(X):
>>>>>>>     def __init__(self, name,adress, cellphone):
>>>>>>>         super(self.__class__, self).__init__(name,adress)
>>>>>>>         self.cellphone =  cellphone
>>>>>>>
>>>>>>> Leyendo en foro detecte que el problema es que la clase X esta
>>>>>>> definida de la siguiente manera:
>>>>>>>
>>>>>>> "class X:" y no "class X(object):" Si yo  ajusto el programa a la
>>>>>>> segunda declaración el problema se resuelve. Sin embargo en el curso que
>>>>>>> estoy haciendo yo no puedo modificar la clase X, solo tengo que agregar el
>>>>>>> código de la clase Y para resolver el problema. Mi pregunta es existe
>>>>>>> alguna otra forma de declarar el constructor de Y, para solucionar el
>>>>>>> problema?
>>>>>>>
>>>>>>
>>>>>> Suena a que te esta mordiendo python 2 vs python 3. En python 3 todas
>>>>>> las clases heredan de object, aunque no lo indiques. En python 2 no.
>>>>>> Si corrés el código con python3 debería andar, ¿Quizás el tutorial
>>>>>> está asumiendo py3?
>>>>>>
>>>>>> Por otro lado, un tema no menor: cuando usas super no tenés que usar
>>>>>> self.__class__, sino el nombre explicito de la clase:
>>>>>>
>>>>>>     super(Y, self).__init__(name, address)
>>>>>>
>>>>>> En tu ejemplo van a andar igual los dos, pero no son lo mismo:
>>>>>> self.__class__ resuelve a la clase del objeto y super(klass, self) te
>>>>>> devuelve self, pero con los métodos de la "clase padre" de klass.(comillas
>>>>>> porque si tenes herencia múltiple hay que ver un par de detalles más, pero
>>>>>> la idea está), entonces si tenes más de un nivel de herencia, pueden pasar
>>>>>> cosas malas.
>>>>>> Acá [0] te dejo un ejemplito de como esto puede salir muy mal :)
>>>>>>
>>>>>> Saludos y mucha suerte con el tutorial :)
>>>>>>
>>>>>> Ignacio
>>>>>>
>>>>>> [0] http://linkode.org/717qk1W0OVpHY6qOXYINv
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Desde ya muchas gracias.
>>>>>>> Saludos,
>>>>>>> Ezequiel
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>
>>
>>
>>
>> --
>> Ezequiel Trapani
>>
>> _______________________________________________
>> 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/20160228/8f74dc43/attachment.html>


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