Почему wx.SingleChoiceDialog должным образом не наследует - PullRequest
4 голосов
/ 17 марта 2009

Я пытаюсь создать подкласс для класса 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__ строкой документации (и API wxPython), 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 в качестве первого аргумента, что, по-видимому, указывает на то, что он на самом деле хочет ссылку на себя.

Когда я убираю родительский аргумент, оставляя себя (а остальные 3, которые, я уверен, в порядке), система жалуется, что она получила только 3 аргумента, когда это было необходимо 4. Я почти уверен, что я прохождение 4.

Итак. Какую явно очевидную ошибку я совершил? Я полностью не понял, как Python обрабатывает объекты (и, следовательно, в значительной степени неправильно понял Python)? Я неправильно понял ООП в целом?

Пожалуйста, помогите. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 15 ноября 2009

Некоторые из диалогов в wxPython не являются подклассами, потому что они не являются реальными классами, а вместо этого обертывают метод API платформы для отображения диалога. Я знаю, что это относится к wx.MessageDialog, это также относится к wx.SingleChoiceDialog.

0 голосов
/ 17 марта 2009
  1. Вызов __init__ кажется нормальным (первый аргумент __init__ всегда self).
  2. Возможно, у вас неправильная сборка wx. Предупреждающее сообщение swig указывает, что для wxSingleChoiceDialog не было сгенерировано дескриптора, см. это обсуждение утечки памяти .

Сообщение может не иметь отношения к вызову __init__.

...