【问题标题】:Trouble understanding a line of code in PyQt无法理解 PyQt 中的一行代码
【发布时间】:2012-05-19 20:46:24
【问题描述】:

我正在尝试从rapid gui programming with python and qt 自己学习PyQt,但无法理解书中示例之一中提到的以下代码行的meaning/requirement

class Form(QDialog):

        def __init__(self,parent=None):
                super(Form,self).__init__(parent) # Trouble understanding here

所以,我的问题是 super(Form,self).__init__(parent) 的需求是什么,或者它试图完全填充 in this code 的目的是什么。

【问题讨论】:

  • 实际上__init__() 在这种情况下显得毫无意义......这是该方法中存在的唯一代码吗?
  • 没有,我附上完整代码pastie.org/3937058
  • 啊,我明白了。这里super(...)...的目的是调用QDialog的构造函数。
  • @JoelCornett:但是我们为什么要调用 QDialog 的构造函数,它将完全满足什么目的。
  • QDialog 是对话框的基类。 QDialog.__init__() 包含生成新 QDialog 对象所需的所有代码。由于Form用它自己的__init__()“覆盖”了原来的QDialog.__init__(),它需要显式调用QDialog.__init__()以确保代码被执行。

标签: python pyqt pyqt4


【解决方案1】:

看看the documentation of super()

返回一个代理对象,该对象将方法调用委托给该类型的父类或同级类。这对于访问已在类中重写的继承方法很有用。搜索顺序与 getattr() 使用的相同,只是跳过了类型本身。

所以基本上这行代码:

super(Form,self).__init__(parent)

在当前类 (Form) 继承的类中找到“最接近”的集合 __init__() 方法,并使用此方法初始化 self 对象,并将 parent 作为第一个参数传递。

【讨论】:

  • 我想他是想问为什么我们在构造函数中将parent 作为参数传递,以及它将在PyQt 中扮演什么角色。
  • 是的,@RanRag 是对的,我知道 super 做了什么,但为什么我们将 parent 作为参数传递。
  • @Noob:您将 parent 作为参数传递,以防您需要将 Form 设置为另一个窗口的子窗口。请注意,默认值为无。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2015-08-22
  • 2020-10-23
  • 2018-06-15
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多