Re: [Python-es] Otra vez la herencia múltiple

vima_roma en wanadoo.es vima_roma en wanadoo.es
Mar Jul 22 22:09:41 CEST 2008


BlackBerry de movistar, allí donde estés está tu oficin@

-----Original Message-----
From: Danny Navarro <vimes656 en gmail.com>

Date: Tue, 22 Jul 2008 21:52:08 
To: Lista de discusión sobre python en castellano<python-es en aditel.org>; Beni<camontuyu en yahoo.es>
Subject: Re: [Python-es] Otra vez la herencia múltiple


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
------------ próxima parte ------------
_______________________________________________
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