Я прочитал программу программирования экспертов Python, которая имеет пример для многоуровневого. Автор книги объяснил, но я этого не понял, поэтому хотел бы получить другое представление.
В примере показано, что объект B
создается два раза!
Не могли бы вы дать мне интуитивное объяснение.
In [1]: class A(object):
...: def __init__(self):
...: print "A"
...: super(A, self).__init__()
In [2]: class B(object):
...: def __init__(self):
...: print "B"
...: super(B, self).__init__()
In [3]: class C(A,B):
...: def __init__(self):
...: print "C"
...: A.__init__(self)
...: B.__init__(self)
In [4]: print "MRO:", [x.__name__ for x in C.__mro__]
MRO: ['C', 'A', 'B', 'object']
In [5]: C()
C
A
B
B
Out[5]: <__main__.C at 0x3efceb8>
Автор книги сказал:
Это происходит из-за вызова
A.__init__(self)
, который выполняется с помощью C, создаваяsuper(A, self).__init__()
вызовB
конструктор
Точка, из которой я не понял, как вызов A.__init__(self)
сделает super(A, self).__init__()
вызов B
конструктор