@Drovosek01

Зачем в классе-наследнике вызывать инициализацию класса-родителя в Python?

Читаю про PyQt5, на сайте увидел такой код:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
    
        self.show()
        
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


Непонятна строка
super().__init__()
Зачем мы в классе Example вызываем инициализацию класса QWidget? Что это нам дает? Мы же при простом наследовании (при объявлении класса Example в скобках указали класс QWidget) уже унаследовали все свойства и методы или нет?
  • Вопрос задан
  • 955 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Zanak
Во первых, разве вызов super не должен выглядеть так:
super(Example, self).__init__()?
Когда мы переопределяем метод в потомке класса, то мы можем заново реализовать всю работу этого метода, и тогда вызов super не нужен вовсе.
Если мы хотим только немного изменить поведение метода, то нам остается в подходящем месте встроить вызов метода родителя, сообщив среде исполнения родителя какого типа мы ищем (в вашем случае Example) и ссылку на текущий экземпляр (это self).
Теперь собственно ответ на ваш вопрос: инициализация класса родителя может быть сложным процессом, потому что свойства предка сами могут быть объектами, которые важно правильно построить и инициализировать, и если вы не готовы делать это сами, в каждом случае, когда создаете нового наследника, то вы можете вызвать super.
Только вызывайте его правильно. :)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы