2012-07-22 20 views
7

だから私は基本的なPythonからPyQt4を使ってGUIプログラミングに移行しようとしています。私はいくつかの本とチュートリアルを見ていますが、それぞれがクラス定義を少しずつ違う方法で持っているようです。PyQt4に__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) 

I

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

別の本のようにそれをしない:そうは次のように

一つのチュートリアルでは、クラスをオフに開始します私はまだクラスとOOPとsuper()とすべての周りに私の心をラップしようとしている...私は考えて正しいですか? 3番目の例の最後の行は、明示的に基底クラスを直接呼び出すことによって、以前のものでsuper()を使用する呼び出しと多かれ少なかれ同じ結果を達成していますか?これらのような比較的簡単な例、つまり単一の継承については、一方の方法と他方の方法を使用する実際のメリットまたは理由はありますか?最後に... 2番目の例では、super()の引数としてparentを渡していますが、最初の場合は...理由/時期/場所についての説明はありません。

答えて

8

最初のものは、parent引数をその基本クラスに渡すことをサポートしていません。 parent引数が必要ないことがわかっているなら、それは問題ありませんが、これはあまり柔軟性がありません。

この例では単一の継承しか持たないため、super(Example, self).__init__(parent)は全く同じQtGui.QDialog.__init__(self, parent)と同じです。かつての用途super後者は直接機能QtGui.QDialog.__init__を呼び出して、明示的にselfparent引数を渡しながらselfが自動的に含まれるように、QtGui.QDialogのメソッドの代わりにExample年代をcalles selfの「バージョン」を取得します。単一の継承では、入力の量と継承を変更する場合にクラス名を変更する必要があるという事実以外にAFAIKの違いはありません。多重継承では、superはメソッドを半知的に解決します。

第3の例では、QDialogの代わりにQWidgetが実際に使用されています。おそらくそれはQDialogQWidgetのサブクラスであり、その__init__で意味のある何もしていないので動作すると思われますが、わかりません。

+0

私は先に私の速い答えのtyper - way – Hubro

+1

@コドモンキーの質問が質問された後で7分後に、それは速くない。 :) – Dougal

関連する問題