In [5]: class a(object):
...: def __init__(self):
...: print "In class a"
...: self.a = 1
...:
In [6]: class b(object):
...: def __init__(self):
...: print "In class b"
...: self.b = 2
...:
...:
In [7]: class c(b, a):
...: pass
...:
In [8]: c.mro()
Out[8]:
[<class '__main__.c'>,
<class '__main__.b'>,
<class '__main__.a'>,
<type 'object'>]
In [9]: obj = c()
In class b
In [10]: obj.__dict__
Out[10]: {'b': 2}
El valor predeterminado __init__
método de la clase c
se llama en obj
creación, que llama internamente al __init__
de b
única clase.Comportamiento de Mutlple herencia en pitón
Según mi entender, si heredo de 2 clases, mi objeto de clase derivado debería tener variables de ambas clases (a menos que sean privadas para esas clases).
Mi pregunta: ¿Me equivoco al esperar que mi objeto derivado contenga variables de ambas clases? Si es así, ¿por qué? ¿No se debe llamar también al __init__
de la clase a
? ¿Qué hubiera pasado en un lenguaje como C++?
La respuesta de jcollado es correcta. Ver [esta respuesta] (http://stackoverflow.com/q/607186) para más detalles sobre cómo funciona 'super'. – perelman