4

我正在尝试继承 wxpython SingleChoiceDialog 类。我有一个 TableChoiceDialog 类,它继承自 SingleChoiceDialog 添加通用功能,并且我有 2 个子类用于添加更精细的功能。基本上我在 OOP'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__文档字符串(和 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 的引用。

当我取出 parent 参数时,留下 self (以及我很确定的其他 3 个参数)系统抱怨它只收到 3 个参数,而它需要 4 个参数。我很确定我通过了 4 个。

所以。我犯了什么明显的错误?我是否完全误解了 python 如何处理对象(因此几乎误解了 python)?我是否误解了整个 OOP?

请帮忙。提前致谢

4

2 回答 2

0
  1. 调用__init__似乎没问题(第一个参数__init__总是self)。
  2. 您可能有错误的wx. swig 的警告消息表明没有为 生成析构函数wxSingleChoiceDialog,请参阅此内存泄漏讨论

该消息可能与__init__呼叫无关。

于 2009-03-17T20:10:21.863 回答
0

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

于 2009-11-15T11:48:01.243 回答