PyQt4 使用 __init__ 的不同方式

2024-02-29

所以...我正在尝试使用 PyQt4 从基本的 Python 转向一些 GUI 编程。我正在看几本不同的书籍和教程,它们似乎都有稍微不同的启动类定义的方式。

一个教程是这样开始课程的:

class Example(QtGui.QDialog):
    def __init__(self):
        super(Example, self).__init__()

另一本书是这样写的:

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

还有一个是这样做的:

class Example(QtGui.QDialog):
    def__init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

我仍在尝试将我的注意力集中在类和 OOP 上super()以及所有......我认为第三个示例的最后一行或多或少完成了与使用调用相同的事情,这是正确的吗?super()在前面的内容中,通过直接显式调用基类?对于诸如此类的相对简单的示例(即单一继承),使用一种方式与另一种方式相比是否有真正的好处或理由?最后...第二个例子通过了parent作为一个论据super()虽然第一个没有......任何关于为什么/何时/何处合适的猜测/解释?


第一个根本不支持传递parent其基类的参数。如果你知道你永远不需要parentarg,很好,但这不太灵活。

由于这个例子只有单一继承,super(Example, self).__init__(parent)完全一样QtGui.QDialog.__init__(self, parent);前者使用super获得一个“版本”self那叫QtGui.QDialog的方法而不是Example的,这样self是自动包含的,而后者直接调用该函数QtGui.QDialog.__init__并明确通过self and parent论据。在单一继承中,除了输入量以及如果更改继承就必须更改类名这一事实之外,据我所知没有什么区别。在多重继承中,super半智能地解析方法。

第三个例子实际使用QWidget代替QDialog,这有点奇怪;大概这有效是因为QDialog是一个子类QWidget并且没有做任何有意义的事情__init__,但我不确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt4 使用 __init__ 的不同方式 的相关文章

随机推荐