除了继承之外,在 `__init__ ` 中使用 python `super() ` 的目的是什么?
What is the purpose of using python `super() `, inside `__init__ ` other than the inheritance?
我在 Youtube 教程中找到了这个简单的程序,该程序使用 QtSide 模块 python。基本上它所做的是将 QLineEdit
连接到 QTextBrowser
。正如您在下面看到的,整个程序由单个 class 处理。我对用于多重继承的 super() 函数有基本的了解。所以在这里,我不明白 super(Form, self).__init__(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.
程序代码:
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_()
这里,super()
有什么用?
我发现了一个可能与此相关的 question。但是我不清楚。
super()
用于继承、多重或其他方式,以调用可能在当前 class.
中被覆盖的方法
此处super()
用于调用为QDialog
或其父class定义的原始__init__
方法。不调用原始方法可能会产生后果,因为原始方法确实有效,您不想在自己的 __init__
方法中复制。
super()
让多重继承处理起来更简单灵活,但是对于多重继承来说只是
基本上,super() 用于继承,正如您已经了解的那样。正如 Martjin 所提到的,当您注释掉时出现在您的案例中的 'consequence' 是已经在“QDialog”class.
中实现的初始化要求
因此,在这个childclass中需要做的就是调用parent的init。
super
和 init
上的 Whosebug 中已经有一篇不错的文章。
super and init
我在 Youtube 教程中找到了这个简单的程序,该程序使用 QtSide 模块 python。基本上它所做的是将 QLineEdit
连接到 QTextBrowser
。正如您在下面看到的,整个程序由单个 class 处理。我对用于多重继承的 super() 函数有基本的了解。所以在这里,我不明白 super(Form, self).__init__(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.
程序代码:
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_()
这里,super()
有什么用?
我发现了一个可能与此相关的 question。但是我不清楚。
super()
用于继承、多重或其他方式,以调用可能在当前 class.
此处super()
用于调用为QDialog
或其父class定义的原始__init__
方法。不调用原始方法可能会产生后果,因为原始方法确实有效,您不想在自己的 __init__
方法中复制。
super()
让多重继承处理起来更简单灵活,但是对于多重继承来说只是
基本上,super() 用于继承,正如您已经了解的那样。正如 Martjin 所提到的,当您注释掉时出现在您的案例中的 'consequence' 是已经在“QDialog”class.
中实现的初始化要求因此,在这个childclass中需要做的就是调用parent的init。
super
和 init
上的 Whosebug 中已经有一篇不错的文章。
super and init