除了继承之外,在`\u init ``内部使用python`super()`的目的是什么?

除了继承之外,在`\u init ``内部使用python`super()`的目的是什么?,python,pyside,multiple-inheritance,super,Python,Pyside,Multiple Inheritance,Super,我在Youtube教程中发现了这个简单的程序,该教程使用python的QtSide模块。基本上,它所做的是将QLineEdit连接到QTextBrowser。正如您在下面看到的,整个程序由单个类处理。我有在多重继承中使用的super()函数的基本概念。所以在这里,我不明白super(Form,self).\uu init\uuu(parent)语句做了什么。我试着运行相同的程序后,评论该语句产生以下错误消息 错误: Traceback (most recent call last): Fil

我在Youtube教程中发现了这个简单的程序,该教程使用python的QtSide模块。基本上,它所做的是将
QLineEdit
连接到
QTextBrowser
。正如您在下面看到的,整个程序由单个类处理。我有在多重继承中使用的super()函数的基本概念。所以在这里,我不明白
super(Form,self).\uu init\uuu(parent)
语句做了什么。我试着运行相同的程序后,评论该语句产生以下错误消息

错误:

Traceback (most recent call last):
  File "/home/dazz/Projects/PycharmProjects/FirstTutorial/a2_gui.py", line 35, in <module>
    form = Form()
  File "/home/dazz/Projects/PycharmProjects/FirstTutorial/a2_gui.py", line 17, in __init__
    self.setLayout(layout)
RuntimeError: '__init__' method of object's base class (Form) not called.
在这里,
super()
有什么用? 我发现了一个可能与此有关的问题。但是我不清楚。

super()
用于调用可能在当前类中被重写的方法的是继承、多继承或其他继承

这里
super()
用于调用为
QDialog
或其父类定义的原始
\uuuuu init\uuuu
方法。不调用原始方法可能会产生后果,因为原始方法确实有效,您不希望在自己的
\uuuu init\uuu
方法中复制

super()
使多重继承更容易处理,也更灵活,但它不仅仅用于多重继承。

基本上,super()用于继承,正如您已经理解的那样。正如Martjin所提到的,在您的案例中出现的“结果”是,在“QDialog”类中已经实现了需要的初始化

因此,在这个子类中需要做的就是调用父类的init

stackoverflow中已经有一篇关于
super
init
的好文章

那么setLayout(layout)是QDialog对象的一个属性,不是吗?
self.setLayout()
QDialog
类的一个方法。
import sys
from PySide.QtCore import *
from PySide.QtGui import *


class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        self.browser = QTextBrowser()
        self.lineEdit = QLineEdit()


        layout = QVBoxLayout()
        layout.addWidget(self.browser)
        layout.addWidget(self.lineEdit)
        self.setLayout(layout)

        self.lineEdit.returnPressed.connect(self.update_ui)
        self.setWindowTitle('Calculate')

    def update_ui(self):
        try:
            text = self.lineEdit.text()
            self.browser.append('%s = %s' % (text, eval(text)))
            self.lineEdit.selectAll()

        except:
            self.browser.append('%s is invalid!' % text)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()