Funktionsparameter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
romulus
User
Beiträge: 7
Registriert: Freitag 22. August 2003, 13:13

Montag 22. März 2004, 11:41

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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Montag 22. März 2004, 13:16

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
Gast

Montag 22. März 2004, 13:37

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!
romulus
User
Beiträge: 7
Registriert: Freitag 22. August 2003, 13:13

Montag 22. März 2004, 13:38

oh ich war nicht eingeloggt. :roll:
Antworten