Self - Selbst und Selbstlos

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
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Hallo,

Zwei Fehlermeldungen tauchen bei mir häufiger auf:

(1) TypeError: where_in() takes exactly 2 arguments (1 given)
(2) NameError: global name 'self' is not defined

Nebenbei erwähnt befürchte ich, daß ich nicht genau weiß, warum man self als Parameter an eine Funktion übergeben muß, die sowiso innerhalb einer Klasse definiert ist.

Where_in() verwendet 2 Parameter, und ändert nach ein paar Berechnungen Item Einstellungen. Die Items gehören natürlich zu einem Widget von self. Also sollte die Definition, nach meinem Verständnis so beginnen

Code: Alles auswählen

def where_in(self, p1, p2):
Egal ob ich where_in dann später mit oder ohne self aufrufe erhalte ich eine Fehlermeldung, die sich entweder auf die Anzahl der Parameter oder auf self bezieht.

Weiß jemand weiter?

Grüße,
4bit
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Self ist nicht automatisch innerhalb der Klasse definiert (es bezieht sich ja auch ueblicherweise auf eine Instanz der Klasse).

Vielmehr ist es so, dass bei einem Aufruf myobject.mymethod(a, b, c) noch das Objekt selbst (myobject) automatisch als erster Parameter uebergeben wird, sodass deine Methode dann die Parameter (myobject, a, b, c) erhaelt.

Daher musst du immer einen zusaetzlichen Parameter in der Parameterliste angeben, und den koenntest du benennen, wie du willst (und dann ist in der Methode eben kein "self" bekannt, sondern der von dir gewaehlte Name), es hat sich aber aus guten Gruenden "self" eingebuergert.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

4bit hat geschrieben:Nebenbei erwähnt befürchte ich, daß ich nicht genau weiß, warum man self als Parameter an eine Funktion übergeben muß, die sowiso innerhalb einer Klasse definiert ist.
Muss man nicht, ``self`` wird bei Instanzmethoden implizit übergeben. Du solltest dir generell nochmal ein Stück Dokumentation zu Klassen ansehen, dann verstehst du das sicherlich besser.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

4bit hat geschrieben:Egal ob ich where_in dann später mit oder ohne self aufrufe erhalte ich eine Fehlermeldung, die sich entweder auf die Anzahl der Parameter oder auf self bezieht.
Wie rufst du es auf? In welchem Kontext ist die Funktion definiert. Beispielcode bei dem der Fehler auftritt ist immer hilfreich bei solchen Problemen, ansonsten siehe die anderen Posts.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Hatte einfach irgendwo ein self vergessen.
Nächstes mal weiß ich dann, wonach ich bei diesen Fehlermeldungen suchen sollte.

Danke.
Antworten