[Python-es] Sobre super()

Andrey Antoukh andsux en gmail.com
Mie Feb 2 10:32:14 CET 2011


Bueno, debo aceptar que tienes razón con lo del uso de self.__class__,
pero a excepción de eso, creo que nadie pregunto en que orden se
ejecutaban, ni nada de la herencia múltiple, la pregunta fue, para que
sirve, y en un principio sirve.. para ejecutar un método padre visto a
groso modo, tal y como fue hecha la pregunta.

Un saludo. Y gracias por el apunte.

El día 1 de febrero de 2011 19:24, Chema Cortes <pych3m4 en gmail.com> escribió:
> El día 1 de febrero de 2011 14:31, Andrey Antoukh <andsux en gmail.com> escribió:
>> No se a que te refieres con que  no es facil de entender, pero lo que
>> acabas de explicar, lo explica claramente el ejemplo..., solo que tu
>> lo has hecho con palabras.
>>
>> Una cosa es que quiera profundizar, y otra cosa es que quiera saber
>> para que sirve en su esencia.
>
> En una cosa tienes razón: es mil veces preferible ver código que
> expresarlo sólo con palabras. Pero tu código no explica correctamente
> para qué sirve de verdad super(), por lo siguiente:
>
> 1) falta código que ilustre su empleo en herencia múltiple, algo que
> da sentido al uso de super() frente al sistema anterior de acceder
> directamente a los métodos de la superclase
>
> 2) usar super(self.__class__, self) es inoperante en herencia múltiple
> e ilustra que realmente no has entendido bien el concepto
>
>
> No tengo tiempo ahora para poner un ejemplo completo, así que lo
> propongo como ejercicio:
>
> Supongamos que tenemos 4 clases:
>
> class A(object):
>  def __init__(self):pass
>
> class B(A):
>  def __init__(self):
>   super(B, self).__init__()
>
> class C(A):
>  def __init__(self):
>   super(C,self).__init__()
>
> class D(B,C):
>  def __init__(self):
>   super(D,self).__init__()
>
>
> d=D()
>
>
> Preguntas:
>
> 1) ¿en qué orden se ejecutarán los métodos de inicialización?  (pista:
> D.__mro__)
> 2) ¿qué pasa cuando en la clase B cambiamos super(B,self) por
> super(self.__class__,self)?
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"


Más información sobre la lista de distribución Python-es