Fehlermeldung beim Ausführen von Klassen

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
mep
User
Beiträge: 17
Registriert: Montag 15. Mai 2006, 15:58

Mittwoch 24. Mai 2006, 12:38

da ich brutaler Anfaänger im Erstellen von Klassen bin, kenn ich mich absolut nicht aus.
folgenden ähnlichen, hier aufs wesentliche beschränkten Code versuche ich über ein Simulationsprogramm (Marc/Mentat) abarbeiten zu lassen:

Code: Alles auswählen

class Nodes:
    def nodes1(x, ab, wib, wie):
        ...
        return

    def...

def main():
    x1 = ...            
    ab1 = ...      
    wib1 = ...     
    wie1 = ...
    ne = Nodes()       
    ne.nodes1(x1, ab1, wib1, wie1)
    ...  
    return 

if __name__ == '__main__':
    main()
folgende Fehlermeldung erhalte ich:
Traceback (most recent call last):
File "modellaufbau.py", line 14, in main
ne.nodes1(x1, ab1, wib1, wie1)
TypeError: nodes1() takes exactly 4 arguments (5 given)
Was genau bedeutet das?
Mir scheint ja so, als ob ich irgendwo noch ein Argument in Klammern dazusetzen muss. Beim Aufruf (Zeile 14)?
Da aber bei der Definition der Funktion nodes1() nur 4 Argumente angefügt werden, versteh ich nicht warum.

Wäre super, wenn mir jemand weiterhelfen könnte.

Gruß
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Mittwoch 24. Mai 2006, 12:52

Ersetz

Code: Alles auswählen

def nodes1(x, ab, wib, wie):
doch mal durch

Code: Alles auswählen

def nodes1(self, x, ab, wib, wie)
und schau ob's dann geht.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 24. Mai 2006, 12:52

Bei der Definition einer Funktion einer Klasse muss immer self als erstes Argument angegeben werden. Aendere also Zeile 2 zu:

Code: Alles auswählen

def nodes1(self, x, ab, wib, wie):
Das self wird aber automatisch uebergeben, sodass man beim Funktionsaufruf nur die restlichen Argumente uebergibt.
mep
User
Beiträge: 17
Registriert: Montag 15. Mai 2006, 15:58

Mittwoch 24. Mai 2006, 13:21

Vielen Dank für die schnellen Antworten :!:
Genau das war das Problem. Ich hatte gedacht, dass das self aus diversen Dokumentationen nur für irgend eine Variable steht.
Ist eben die erste Klasse, die ich geschrieben habe. :D
Das heißt, ich muss in jede Funktion die ich schreibe self als erstes Argument verwenden, oder?
Beim Aufruf der Funktion muss aber self nicht definiert werden, wie die anderen Variablen (bei mir z.B. x1)?
Welche Bedeutung hat das self dann genau?
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Mittwoch 24. Mai 2006, 13:36

Du musst self bei Funktionen die einer Klasse untergeordnet sind immer als erstes Argument angeben. Bei Funktionen, die nicht einer Klasse untergeordnet sind, ist dass so weit ich weiss nicht nötig.
Genau, self muss beim Aufruf der Funktion nicht mit angegeben werden.
Welche Bedeutung self hat ist mir auch noch nicht 100%ig klar - bin selber auch noch ziemlicher Anfänger.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 24. Mai 2006, 14:08

Hi!

Hier noch ein Link zu diesem Thema:
http://starship.python.net/crew/gherman ... ode11.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Mittwoch 24. Mai 2006, 14:44

mep hat geschrieben:Genau das war das Problem. Ich hatte gedacht, dass das self aus diversen Dokumentationen nur für irgend eine Variable steht.
Du musst sie nicht self nennen, du könntest sie auch "this" oder "x" nennen. Auf jeden Falle bekommt die erste Variable immer die jeweilige Instanz der Klasse übergeben.
Antworten