Seite 1 von 1
Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 10:11
von mariomueller
Hallo zusammen,
ich komme aus der JAVA Ecke und arbeite mich gerade in Python ein.
Muss ich in Python bevor ich eine Kasse verwende, diese "weiter oben" deklariert haben?
Es gibt bestimmt bereits eine Antwort im Web; ich weiß aber leider nicht, nach welchen Schlagwörtern ich hier suchen muss.
ich bitte daher um Nachsicht
Danke, viele Grüße
Mario
Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 10:36
von Sirius3
Ja, bevor man einen Namen verwenden will (und da ist es egal, ob es sich um eine Klassendefinition, Funktion oder Konstante handelt) muß man sie definieren.
Was meinst Du aber mit "deklarieren"?
Zeige Code, der Deiner Meinung nach Probleme macht.
Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 10:45
von __deets__
Anders als bei C/C++ geht in Python sowas problemlos:
Code: Alles auswählen
def tuwas():
egal = MeineKlasse()
class MeineKlasse:
....
if __name__ == "__main__": # import guard, einfach mal hier suchenr
tuwas()
Es kommt also auf die *Ausfuehrungsreihenfolge* an. tuwas kann definiert werden (Deklarationen in Python gibt es nicht, ebensowenig wie in Java) bevor MeineKlasse.
Was natuerlich nicht geht ist tuwas aufzurufen, bevor der Interpreter an "class MeineKlasse" vorbeigekommen ist.
Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 11:43
von mariomueller
Zur Klarstellung
Ursprünglich war mein Coding (erst Klasse, dann prozessieren der Klasse)
Code: Alles auswählen
# neural network class definition
class neuralNetwork:
# initialise the neural network
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
# set number of nodes in each input, hidden, output layer
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
.....
Code: Alles auswählen
# create instance of neural network
n = neuralNetwork(input_nodes,hidden_nodes,output_nodes, learning_rate)
Nachdem ich die Blöcke vertauscht habe, hat es nicht mehr funktioniert

Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 11:56
von Sirius3
Klassen schreibt man gross: NeuralNetwork. Benutze keine Abkürzungen: warum self.inodes statt self.inputnodes?
Python ist eine dynamische Sprache, das heißt, dass auch Funktionen und Klassen erst zur Laufzeit erzeugt werden. Wenn also die Klassendefinition noch nicht verarbeitet wurde, existiert die Klasse nicht.
Auf oberster Ebene sollte kein ausführbarer Code stehen, nur Klassen- oder Funktionsdefinitionen, wie __deets__ das ja schon in seinem Beispiel gezeigt hat. Damit hat man auch kein Problem, in welcher Reihenfolge welche Definitionen geschrieben werden.
Die Kommentare sind allesamt unnötig, weil sie nur das beschreiben, was in der nächsten Zeile eh schon als Code steht.
Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 11:57
von __deets__
Wie ich schon schrieb, sowas geht nicht:
Und dabei ist egal, ob tuwas eine Funktion oder eine Klasse ist.
Python arbeitet eine Datei zeilenweise ab. Es gibt keine vorherige Analyse, was darin Klassen und Funktionen sind, und die wuerden dann zuerst ausgefuehrt.
Weshalb auch gilt: auf oberster Modulebene gehoeren NUR
- importe
- KONSTANTEN
- Funktions- und Klassendefinitionen
Wenn gibt es *ganz am Ende* einen import-Guard:
Code: Alles auswählen
if __name__ == "__main__":
main() # oder eine andere Funktion
# ende der Datei
Und noch eine Anmerkung zum Schluss: coding ist eine Taetigkeit, nicht das Ergebnis dieser Taetigkeit. "I was coding in the park". Das Result dieses Ausflugs ins Gruene ist "Code".
Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 12:01
von mariomueller
Danke an Alle; ich habe es verstanden! Das war sehr hilfreich
BTW: Das Coding stammt nicht von mir

Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 12:09
von __deets__
Das mag sein, aber Coding ist immer noch der falsche Begriff. Es ist ja nicht so, als wir in Deutschland nicht eine lange Tradition von falsch uebernommenen Begriffen aus dem Englischen haetten. "Handy", "Bodybag", "for better understanding" oder der gute alte Klassiker "Douglas - come in and find out", bei dem der native Speaker sich wundert, warum man denn hereinkommen sollte, wenn man dann gleich wieder raus finden will...
Re: Klassendeklaration vor der Verwendung?
Verfasst: Freitag 21. August 2020, 12:15
von mariomueller
__deets__ hat geschrieben: Freitag 21. August 2020, 12:09
Das mag sein, aber Coding ist immer noch der falsche Begriff. Es ist ja nicht so, als wir in Deutschland nicht eine lange Tradition von falsch uebernommenen Begriffen aus dem Englischen haetten. "Handy", "Bodybag", "for better understanding" oder der gute alte Klassiker "Douglas - come in and find out", bei dem der native Speaker sich wundert, warum man denn hereinkommen sollte, wenn man dann gleich wieder raus finden will...