Seite 1 von 1

Funktionsparameter

Verfasst: Montag 22. März 2004, 11:41
von romulus
Hi,

ich bin noch ziemlicher Python-Newbie und habe ein Problem mit der Parameterübergabe in einem wxWidgets Projekt. Ich glaube es ist nicht wxWidgets spezifisch, deshalb hab ich den Thread erstmal hier eröffnet. Kann ja noch verschoben werden, wenn es doch ein wxWidgets Problem ist.

Also folgenden code hab ich:

Code: Alles auswählen

class MyFrame(wx.Frame):
    (...)
    def OnClickGoButton(self, event):
        (...)
        mystring = "test"
        self.SetUserData(self, mystring)
     
    def SetUserData(self, einstring):
        print einstring
Die Methode OnClickGoButton wird korrekt aufgerufen wenn ich einen bestimmten Button drücke. Aus dieser methode will ich nun eine weitere Methode SetUserData aufrufen. So wie es oben geschrieben ist, funktioniert es aber nicht, da python immer die Meldung bringt: "TypeError: SetUserData() takes exactly 2 arguments (3 given)"

Der Code funktioniert erst, wenn ich die Funktion SetUserData so definiere:

Code: Alles auswählen

def SetUserData(self, *einstring):
Dann besteht die Variable einstring aber aus einem Tuple:

Code: Alles auswählen

(<__main__.MyFrame instance; proxy of C++ wxFrame instance at _946d58_wxFrame_p>, 'test')
Wie muss ich die Methode richtig definieren, damit ich einfach auf den Parameter zugreifen kann?

Wäre nett, wenn mir jemand einen Tipp geben könnte.

Verfasst: Montag 22. März 2004, 13:16
von Milan
Hi. Scheinbar hats du das Prinzip der Klassen hier noch nicht ganz verstanden, denn die Funktion ist richtig definiert, du ruftst sie nur falsch auf. Richtig wäre es so:

Code: Alles auswählen

self.SetUserData(mystring)
Dadurch, dass SetUserdata eine Methode ist, wird beim Aufruf das Object automatisch übergeben, von welchem es die Methode ist. Hier wäre das Object self. Machst du später eine Instanz der Klasse mit a=MyFrame(...), so kannst du entweder a.SetUserData(einstring) rufen (hier wird a automatisch übergeben) oder direkt an der Klasse durch MyFrame.SetUserData(a,einstring).

Hmm, vielleicht noch nicht ganz schlüssig erklärt... frag einfach weiter, wenn du es noch nicht verstehst.

Milan

Verfasst: Montag 22. März 2004, 13:37
von Gast
ah, dass die Instanz automatisch übergeben wird, wusste ich nicht. Gut dass ich gefragt habe :) Hab früher ein bisschen was in Delphi gemacht und da war das nicht so.

Danke jedenfalls!

Verfasst: Montag 22. März 2004, 13:38
von romulus
oh ich war nicht eingeloggt. :roll: