Задать вопрос
@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/
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
27 янв. 2025, в 01:27
3000 руб./за проект
27 янв. 2025, в 00:44
1000 руб./за проект