[pyar] Herencia en Python
Ezequiel Trapani
etrapani04 en gmail.com
Dom Feb 28 11:39:14 ART 2016
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.
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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160228/20a52cac/attachment-0001.html>
Más información sobre la lista de distribución pyar