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