Seite 1 von 1

Noob-Question: Problem beim Erstellen einer Klasse

Verfasst: Montag 2. Juli 2007, 09:09
von McRib
Ich habe in einer Datei D diverse Klassen definiert. Alle Klassen erwarten irgendwelche Parameter also

Code: Alles auswählen

# Datei D

class c1( a, b ):
  def myfunc():
    pass

class c2( a, b,c  ):
  def myfunc():
    pass
wenn ich die Datei importiere, bekomme ich einen NameError, das bei c1 a und b nicht definiert sind:

Code: Alles auswählen

 class c1( a, b ):
NameError: name 'a' is not defined

Re: Noob-Question: Problem beim Erstellen einer Klasse

Verfasst: Montag 2. Juli 2007, 09:26
von EnTeQuAk
McRib hat geschrieben:Ich habe in einer Datei D diverse Klassen definiert. Alle Klassen erwarten irgendwelche Parameter also

Code: Alles auswählen

# Datei D

class c1( a, b ):
  def myfunc():
    pass

class c2( a, b,c  ):
  def myfunc():
    pass
wenn ich die Datei importiere, bekomme ich einen NameError, das bei c1 a und b nicht definiert sind:

Code: Alles auswählen

 class c1( a, b ):
NameError: name 'a' is not defined
Klassen != Funktionen.

Wenn du der Klasse 'c1' Die Parameter 'a' und 'b' übergeben möchtest, müsste dessen Formulierung so lauten:

Code: Alles auswählen

class c1(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
Dann kannst du innerhalb der Klasse auf die Parameter 'self.a' und 'self.b' zugreifen.

Dort, wo du deine vermeintlichen Parameter reingeschrieben hast, also in den Kopf der Klasse, kommen Abhängigkeiten/Klasse, von denen deine Klasse 'c1' erbt. Du bekommst den NameError, weil Python vergeblich nach den Klassen 'a' und 'b' sucht, von denen 'c1' erben könnte.
Verständlich ;) Ich würde mich da auch beschweren *g*

Aber so, wie ich das sehe, solltest du dir eventuell erstmal ein paar mehr infos zu Objekt Orientierter Programmierung holen: http://abop-german.berlios.de/read/oops.html
Und eventuell auch Objekt Orientierte Programmierung mit Python @ShowMeDo

MfG EnTeQuAk

Verfasst: Montag 2. Juli 2007, 11:06
von McRib
Fuer einen Java-Entwickler ist die Notation, wie ich sie hatte voellig klar ... ;-)
Vielen Dank fuer die schnelle Antwort.

Verfasst: Montag 2. Juli 2007, 11:11
von BlackJack
Auch bei Java würden an der Stelle nach einem ``extends`` die Namen der Basisklassen folgen und den Konstruktor würde man im Körper der Klassendefinition extra schreiben.