为什么wx.SingleChoiceDialog没有正确子类化

时间:2009-03-17 19:21:40

标签: python oop wxpython subclass

我正在尝试子类化wxpython SingleChoiceDialog类。我有一个TableChoiceDialog类继承自SingleChoiceDialog添加通用功能,我有2个子类,为此添加更精致的功能。基本上我是O.O.P'ing

在我的TableChoiceDialog类中,我有一行调用超类的__init__,即

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

我遇到的问题是,根据SingleChoiceDialog.__init__ docstring(以及wxPython API),SingleChoiceDialog没有将self参数作为__init__方法的一部分。

    __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.

如果我取出self参数,系统会抱怨它期望一个SingleChoiceDialog对象作为第一个参数,这似乎指向它实际上想要一个对self的引用。

当我拿出父参数时,离开self(以及其他3个我很确定没问题)系统抱怨它只收到3个参数,当它需要时4.我很确定我是通过4。

因此。我犯了哪些明显的错误?我是否完全误解了python如何处理对象(因此几乎误解了python)?我是否误解了OOP?

请帮忙。提前致谢

2 个答案:

答案 0 :(得分:0)

  1. __init__的调用似乎没问题(__init__的第一个参数始终为self)。
  2. 您可能错误地构建了wx。 swig的警告消息表明没有为wxSingleChoiceDialog生成析构函数,请参阅this memory leak discussion
  3. 该消息可能与__init__电话无关。

答案 1 :(得分:0)

wxPython中的一些对话框不是子类,因为它们不是真正的类,而是围绕用于显示对话框的平台API方法的包装。我知道wx.MessageDialog就是这种情况,wx.SingleChoiceDialog也可能是这种情况。