Re: Otra vez la herencia múltiple

Danny Navarro vimes656 en gmail.com
Mar Jul 22 21:52:08 CEST 2008


Hola Benito,

Este link explica de manera muy fácil cuál es el sentido de usar super()
http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html#id837781

Básicamente super() distingue qué método escoger cuando hay una  
colisión de nombres en dos superclases. El método que super() escoge  
depende del __mro__ de la clase desde donde se usa super(). El orden  
de precedencia viene explicado en el documento.

De todas formas es un poco peligroso andar con herencia múltiple, si  
tienes alternativas razonables trataría de evitarla.

--
Danny Navarro
http://twitter.com/vimes656

On 22 Jul 2008, at 18:47, Beni wrote:

> Tengo este código de ejemplo:
>
> class A(object):
>    def __init__(self, nombre):
>        print nombre
>
> class B(object):
>    def __init__(self, nombre, apellidos):
>        print nombre, apellidos
>
> class C(A, B):
>    def __init__(self):
>        super(C, self).__init__("hola")
>
> class D(B, A):
>    def __init__(self):
>        super(D, self).__init__("hola", "adios")
>
> print "C (A, B) - A(nombre) - B(nombre, apellidos) >",
> c = C()
>
> print "D (B, A) - A(nombre) - B(nombre, apellidos) >",
> d = D()
>
> Devuelve:
>
> C (A, B) - A(nombre) - B(nombre, apellidos) > hola
> D (B, A) - A(nombre) - B(nombre, apellidos) > hola adios
>
> A parte de que, parece que sobreescribe los métodos por el orden de la
> definción de la clase:
>
> - C(A, B) usa el init de A
> - D(B, A) usa el init de B
>
> ¿Como puedo llamar a ambos métodos init desde la clase hija con los
> parámetros que guste? Debo hacer
>
> class C(A, B):
>    def __init__():
>        A.__init__(self, "hola")
>        B.__init__(self, "hola", "adios")
>
> Si es así, ¿para que sirve el super?. No le veo utilidad (en el  
> nivel de
> conocimiento que tengo de python)
>
> Saludo y gracias.
>
> -- 
> Benito Rodríguez Arcos
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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