Seite 1 von 1

Klasse definieren und parameter übergeben

Verfasst: Donnerstag 14. Mai 2009, 10:58
von 4bit
Ein Frage für Anfänger.

Ich habe eine Klasse paramInterpreter definiert und hatte angenommen ich kann gleich bei der Instanzierung Parameter mitgeben. Wenn ich diese Parameter wie bei der Funktionendefinition dazu schreibe, nimmt Python an ich möchte eine Ableitung von anderen Klassen machen.

Kann man nun Parameter bei der Instanzierung übergeben oder nicht?

Hier ein paar Zeilen Code:

Code: Alles auswählen

class paramInterpreter(variablen, maxWert, paramDatei):
    self.n = variablen
    self.m = maxWert
    self.source = paramDatein
und die zu erwartende Fehlermeldung:

class paramInterpreter(variablen, maxWert, paramDatei): NameError: name 'variablen' is not defined

Grüße,
4bit.

Verfasst: Donnerstag 14. Mai 2009, 11:05
von EyDu
Du kannst bei einer Klasse keine Parameter angeben, so wie du sie verwenden möchtest. In den Klammern übergibst du die Basisklassen der neuen Klasse.

Du suchst wahrscheinlich das hier:

Code: Alles auswählen

class ParameterInterpreter(object):
    def __init__(variablen, maxWert, paramDatei):
        self.n = variablen
        self.m = maxWert
        self.source = paramDatein
Du hast im Tutorial aber bestimmt den Abschnitt über Klassen gelesen, oder? ;-)

Verfasst: Donnerstag 14. Mai 2009, 11:07
von Darii
Steht alles in der Doku, du suchst __init__.

Ich würde dir wirklich raten das mal durchzuarbeiten, ``self.n = variablen`` wird dir nämlich auch eine Fehlermeldung bescheren (self ist nämlich an der Stelle nicht definiert). EyDu hat self in der __init__-Funktion auch vergessen, schreib das einfach als ersten Parameter hin, dann klappt das Beispiel. Warum das so ist steht übrigens auch in dem schon genannten Doku-Artikel.

Verfasst: Donnerstag 14. Mai 2009, 11:18
von 4bit
ok, läuft.

In diesem Fall möchte ich eine Klasse benutzen, die in einem Modul definiert wird:

Code: Alles auswählen

import cool_tranistions

tran = cool_transitions.paramInterpreter(1,2,"drei")
Das letzte Statement wird aber wahrscheinlich als Versuch interpretiert eine Funktion aufzurufen:

AttributeError: 'module' object has no attribute 'paramInterpreter'


Ohne Modul Namen gibts einen "globaler Name nicht bekannt" Fehler.
Wie mach ich das richtig?

Danke und Grüße,
4bit.

Verfasst: Donnerstag 14. Mai 2009, 11:23
von EyDu
Du solltest der Fehlermeldung schon glauben! In "cool_transitions" gibt es nichts was "paramInterpreter" heißt. Vielleicht hast du es falsch geschrieben, oder du benutzt Idle und hast das Modul nicht neu geladen, oder ...

Verfasst: Donnerstag 14. Mai 2009, 11:28
von kbr
4bit hat geschrieben:Wie mach ich das richtig?
i und s tauschen.

Verfasst: Donnerstag 14. Mai 2009, 11:32
von 4bit
Danke, ihr habt beide recht.
Arbeite mit IDLE und hatte den reload vergessen.

danke,
4bit.