gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:49:46 24 4
gpt4 key购买 nike

我在 Youtube 教程中找到了这个简单的程序,该教程使用 QtSide 模块和 python。基本上它所做的是将 QLineEdit 连接到 QTextBrowser。正如您在下面看到的,整个程序由单个类处理。我对用于多重继承的 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() 用于继承、多重继承或其他方式,以调用可能在当前类中被覆盖的方法。

此处super() 用于调用为QDialog 或其父类定义的原始__init__ 方法。不调用原始方法可能会产生后果,因为您不想在自己的 __init__ 方法中复制原始方法。

super() 使多重继承处理起来更容易、更灵活,但它不仅仅是多重继承。

关于python - 除了继承之外,在 `super() ` 内部使用 python `__init__ ` 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33008980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com