Re: Otra vez la herencia múltiple

Beni camontuyu en yahoo.es
Mie Jul 23 13:57:02 CEST 2008


Leyendo lo que me habeis pasado y pensando un poco...

supongo que como parece que funciona python, la signatura de los métodos
tiene que ser igual. Pero no veo el por que no tener constructores con
distintos tipos de parámetros. Java los usa continuamente. Es más, son
objetos distintos que tienen sus propias propiedades y métodos. Y si heredo
de ellos necesitaré algún método para poder llamarlos con los parámetros que
yo crea necesarios en el hijo.

Si no me equivoco (no domino mucho el inglés) parece que super te devuelve
el tipo de una clase para llamar al método. Este tipo pude ser A, B, C
dependiendo de la definición de la misma. Por tanto, como comentaba Alexis,
deben tener la misma signatura.

Por tanto para llamar a cada constructor necesitaré hacerlo de la forma
antes comentada.
class C(A, B):
    def __init__():
        A.__init__(self, "hola")
        B.__init__(self, "hola", "adios")

¿Sería correcto?

Un saludo y gracias.

2008/7/22 <vima_roma en wanadoo.es>:

>
> 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
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>



-- 
Benito Rodríguez Arcos
------------ 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