tgoop.com/quiz_python/4025
Last Update:
- self.__x = 100 - создается приватный атрибут __x со значением 100
- self.y = 200 - создается публичный атрибут y со значением 200
2. В классе C (дочерний класс):
- super().__init__() - вызывается конструктор родительского класса
- self.__x = 300 - создается НОВЫЙ приватный атрибут __x со значением 300
- self.y = 400 - переопределяется значение публичного атрибута y
Ключевой момент здесь в том, что в Python приватные атрибуты (с двойным подчеркиванием __) автоматически «манглируются» (переименовываются) интерпретатором. Когда мы создаем приватный атрибут __x в классе P, он фактически становится _P__x, а когда создаем __x в классе C, он становится _C__x.
Поэтому:
1. Когда вызывается d.print(), метод print из класса P обращается к self.__x, что на самом деле означает self._P__x, поэтому выводится 100
2. Атрибут y является публичным, поэтому его значение успешно переопределяется в классе C на 400
Таким образом, в выводе мы видим:
- 100 (значение _P__x из родительского класса)
- 400 (значение y из дочернего класса)
Это демонстрирует важное различие между приватными и публичными атрибутами в Python при наследовании.
BY Python: задачки и вопросы
Share with your friend now:
tgoop.com/quiz_python/4025