2009-03-17 8 views
4

J'essaie de sous-classer la classe wxpython SingleChoiceDialog. J'ai une classe TableChoiceDialog qui hérite de SingleChoiceDialog en ajoutant une fonctionnalité générique, et j'ai 2 sous-classes pour cela ajouter des fonctionnalités plus raffinées. Au fond, je suis OOP'ingPourquoi wx.SingleChoiceDialog ne sous-classe pas correctement

Dans ma classe TableChoiceDialog j'ai une ligne qui appelle __init__ de la superclasse, à savoir

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

Le problème que je vais avoir est que, selon le SingleChoiceDialog.__init__ docstring (et API wxPython), SingleChoiceDialog n'a pas l'argument self dans sa méthode __init__.

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

Comme je l'ai ci-dessus, le programme imprime l'erreur:

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

Si je prends le paramètre auto du système se plaint qu'il attendait un objet SingleChoiceDialog comme premier argument, qui semble pour indiquer qu'il veut réellement une référence à soi.

Quand je sors l'argument parent, en laissant moi-même (et les 3 autres dont je suis sûr que ça va) le système se plaint qu'il n'a reçu que 3 arguments, quand il en avait besoin 4. Je suis assez certain m passant à 4.

Donc. Quelle erreur manifestement évidente ai-je faite? Ai-je totalement mal compris comment python gère les objets (et donc à peu près mal compris python)? Ai-je mal compris la POO dans son ensemble?

Aidez-nous s'il vous plaît. Merci à l'avance

Répondre

0
  1. L'appel à __init__ semble bien (le premier argument de __init__ est toujours self). Vous pourriez avoir une mauvaise construction de wx. Le message d'avertissement du swig indique qu'il n'y a pas de descacheur généré pour wxSingleChoiceDialog, voir this memory leak discussion.

Le message peut ne pas être lié à l'appel __init__.

0

Certaines des boîtes de dialogue dans wxPython ne sont pas sous-classifiables car elles ne sont pas de vraies classes, mais plutôt des wrappers autour de la méthode d'API de plate-forme pour afficher la boîte de dialogue. Je sais que c'est le cas pour wx.MessageDialog, cela pourrait aussi être le cas pour wx.SingleChoiceDialog.