Seite 1 von 1

Fehlermeldung beim Ausführen von Klassen

Verfasst: Mittwoch 24. Mai 2006, 12:38
von mep
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ß

Re: Fehlermeldung beim Ausführen von Klassen

Verfasst: Mittwoch 24. Mai 2006, 12:52
von rumilmirion
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.

Verfasst: Mittwoch 24. Mai 2006, 12:52
von Rebecca
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.

Verfasst: Mittwoch 24. Mai 2006, 13:21
von mep
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?

Verfasst: Mittwoch 24. Mai 2006, 13:36
von rumilmirion
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.

Verfasst: Mittwoch 24. Mai 2006, 14:08
von gerold
Hi!

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

mfg
Gerold
:-)

Verfasst: Mittwoch 24. Mai 2006, 14:44
von Joghurt
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.