使用__init__为PyQt4中的不同方法(Different ways of using __i

2019-07-30 12:42发布

所以...我正在试图从基本的Python转移到一些GUI编程,使用PyQt4的。 我期待在几个不同的书籍和教程,并且它们都似乎有拉开类定义的方式略有不同。

一个教程开始了类,如下所示:

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()而先不...任何猜测/解释,为什么/何时/何这将是合适的?

Answer 1:

第一个根本不支持将一个parent参数基类。 如果你知道你永远需要的parent ARG,这很好,但是这是不够灵活。

由于本例仅具有单继承, super(Example, self).__init__(parent)是完全相同QtGui.QDialog.__init__(self, parent) ; 前者使用super获得的“版本” self那卡列斯QtGui.QDialog的方法,而不是Example的,让self被自动包含,而后者则直接调用该函数QtGui.QDialog.__init__并明确通过了selfparent争论。 在单继承还有据我所知除了打字量,你有,如果你改变继承更改类名的事实,没有什么区别。 在多重继承, super解析方法半智能化。

第三个例子实际上使用QWidget代替QDialog ,这是一个小怪异; 大概是可行的,因为QDialog是子类QWidget并没有做任何有意义其__init__ ,但我不知道。



文章来源: Different ways of using __init__ for PyQt4