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}
Значение по умолчанию __init__
метод класса c
вызывается obj
создания, который внутренне называет __init__
из единственного класса b
.Поведение наследования Mutlple в питона
В соответствии с моим пониманием, если я наследую от 2 класса, мой производный объект класса должен иметь переменные из обоих классов (если они не являются частными для этих классов).
Мой вопрос: Я ошибаюсь в ожидании того, что мой производный объект содержит переменные из обоих классов? Если да, то почему? Должна ли называться __init__
класса a
? Что бы случилось на языке C++?
Ответ jcollado правильный. См. [Этот ответ] (http://stackoverflow.com/q/607186) для более подробной информации о том, как работает 'super'. – perelman