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

Beni camontuyu en yahoo.es
Mar Jul 22 18:47:46 CEST 2008


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


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