Задать вопрос
@nevro
не пойми кто

Что происходит при вызове super() в наследнике?

Всем привет.
class Person():
   def __init__(self, name):
         self.name = name

class MDPerson(Person):
   def __init__(self, name):
        self.name = name
        super.__init__(name)

mdperson = MDPerson('Fudd')


Перед присваиванием пайтон создает только объект класса MDPerson? Или и объект класса Person? Не пойму, что будет если в MDPerson сделать присваивание name, и еще вызвать super() для родителя. Невозможно, чтобы существовали одновременно 2 переменных name в одном объекте класса MDPerson. Тогда будет либо перезатирание, либо по одной переменной в объекте класса MDPerson и Person?
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@gimntut
Person создаст поле name, т.к. у предка такого поля не было.
MDPerson будет использовать поле name, которое ему досталось по наследству.
Если вызвать super, то будет вызван метод Person, который будет менять ту же переменную.
Объект класса MDPerson так же является объектом класса Person и других предков, т.к. MDPerson получил все способности в наследство от Person, поэтому может использоваться там же, где объекты класса Person.
print(isinstance(mdperson, Person), isinstance(mdperson, MDPerson) )

К сведению: https://habr.com/post/62203/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы