Noob-Question: Problem beim Erstellen einer Klasse

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
McRib
User
Beiträge: 9
Registriert: Sonntag 1. Juli 2007, 17:31

Montag 2. Juli 2007, 09:09

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 2. Juli 2007, 09:26

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
McRib
User
Beiträge: 9
Registriert: Sonntag 1. Juli 2007, 17:31

Montag 2. Juli 2007, 11:06

Fuer einen Java-Entwickler ist die Notation, wie ich sie hatte voellig klar ... ;-)
Vielen Dank fuer die schnelle Antwort.
BlackJack

Montag 2. Juli 2007, 11:11

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.
Antworten