#python #inheritance
Вопрос:
Рассмотрим такой фрагмент кода:
class C:
def __init__(self):
print(id(self))
class D(C):
def __init__(self):
super(D, self).__init__()
print(id(super(D, self)))
if __name__ == '__main__':
d = D()
что производит для меня:
140267543158096
140267543678800
Почему это происходит?
Я ожидал, что результат должен быть одинаковым, потому что super(D, self) и self
in C
-это один и тот же объект.
Комментарии:
1. Потому
super(C, self))
что inD.__init__
-этоsuper
объект , тогдаid(self)
как inC
-этоD
объект. Это два разных типа объектов , не говоря уже об идентичных объектах. Попробуйте печататьtype(self)
C.__init__
снова иtype(super(C, self))
D.__init__
снова . Вы должны понимать,super
что это класс , он возвращает объект особого типа, который действует как прокси для вызова метода, предоставляя вам следующий метод в порядке разрешения метода .2. Обратите внимание, что, как правило, вы не вызывали
super(C, self)
бы внутри методаD
. Это возможно, но необычно3. @juanpa.arrivillaga Я обновил код, но результат тот же.
4. Пожалуйста, прочтите мой первый комментарий . Второй был в стороне, это не имеет отношения к такому поведению.