2009-03-17 7 views
4

私はwxpython SingleChoiceDialogクラスをサブクラス化しようとしています。私は、SingleChoiceDialogから継承したTableChoiceDialogクラスを汎用的な機能を追加しています。それに、より洗練された機能を追加する2つのサブクラスがあります。基本的に私は、すなわちwx.SingleChoiceDialogが正しくサブクラス化されないのはなぜですか?

class TableChoiceDialog(wx.SingleChoiceDialog): 
    def __init__(self, parent, message, caption, list, ...other args...): 
     wx.SingleChoiceDialog.__init__(self, parent, message, caption, list) 

私がいる問題がSingleChoiceDialog.__init__ドキュメンテーション文字列に応じてということです(と、私はスーパークラスの__init__を呼び出す行を持って私のTableChoiceDialogクラスで

をOOP'ingよwxPython API)、SingleChoiceDialogには、__init__メソッドの一部としてself引数がありません。

__init__(Window parent, String message, String caption, 
     List choices=EmptyList, long style=CHOICEDLG_STYLE, 
     Point pos=DefaultPosition) -> SingleChoiceDialog 

私は上記のそれを持っていると、プログラムはエラーを出力します。

swig/python detected a memory leak of type 'wxSingleChoiceDialog *', no destructor found. 

私は自己パラメータを取る場合は、システムがそれはそう最初の引数としてSingleChoiceDialogオブジェクトを期待していたことを不平を言います実際に自己への参照を望んでいることを指しています。

私が親の議論を取り去ったとき、自己(そして私がかなり確信している他の3人)を残すと、システムはそれが必要なときに3つの引数しか受け取らなかったと訴える。 mを渡す。

だから。どんなに明白な間違いを私は作ったのですか?私は完全にPythonがオブジェクトを扱う方法を誤解していますか?私はOOP全体を誤解しましたか?

助けてください。事前のおかげで

答えて

0
  1. __init__への呼び出しは、(__init__への最初の引数は常にselfです)大丈夫そうです。
  2. wxのビルドが間違っている可能性があります。 swigの警告メッセージは、wxSingleChoiceDialogについてデストラクタが生成されていないことを示します。this memory leak discussionを参照してください。

メッセージは__init__コールとは関係ありません。

0

wxPythonのダイアログの中には、実際のクラスではなく、ダイアログを表示するためのプラットフォームAPIメソッドのラッパーであるため、サブクラス化できないものがあります。これがwx.MessageDialogの場合、wx.SingleChoiceDialogの場合もあります。

関連する問題