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

Fehlermeldung beim Ausführen von Klassen

Beitragvon mep » 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

Re: Fehlermeldung beim Ausführen von Klassen

Beitragvon rumilmirion » 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:

Beitragvon Rebecca » 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

Beitragvon mep » 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

Beitragvon rumilmirion » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » 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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder