Python PyQt4使用_uinit__u的不同方式

Python PyQt4使用_uinit__u的不同方式,python,pyqt,pyqt4,super,Python,Pyqt,Pyqt4,Super,所以。。。我正在尝试使用PyQt4从基本Python迁移到一些GUI编程。我正在看两本不同的书和教程,它们似乎都有一种稍微不同的方式来开始定义类 一个教程以如下方式开始课程: class Example(QtGui.QDialog): def __init__(self): super(Example, self).__init__() 另一本书是这样写的: class Example(QtGui.QDialog): def __init__(self, par

所以。。。我正在尝试使用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()
,而第一个示例不。。。任何关于为什么/何时/何处合适的猜测/解释?

第一种猜测/解释根本不支持将
父参数
传递给它的基类。如果您知道您永远不需要
父对象
arg,这很好,但灵活性较低

由于此示例仅具有单一继承,
super(示例,self)。\uuuuu init\uuuuu(父项)
QtGui.QDialog.\uuuuuu init\uuuuuuu(self,父项)
完全相同;前者使用
super
获取调用
QtGui.QDialog
方法的
self
的“版本”,而不是
Example
,因此自动包含
self
,后者直接调用函数
QtGui.QDialog.\uuuu init\uuuu
,并显式传递
self
parent
参数。在单继承中,除了键入的数量和如果更改继承就必须更改类名这一事实之外,没有其他区别。在多重继承中,
super
半智能地解析方法


第三个示例实际上使用了
QWidget
而不是
QDialog
,这有点奇怪;这大概是因为
QDialog
QWidget
的一个子类,在它的
\uuuu init\uuuuuu
中没有做任何有意义的事情,但我不确定。

你是一个快速回答类型-远远领先于me@Codemonkey提问7分钟后,不要那么快。:)