[pyar] Herencia en Python

Ezequiel Trapani etrapani04 en gmail.com
Dom Feb 28 11:23:58 ART 2016


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160228/67991da8/attachment.html>


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