Hauptmethode in Python

7

Ich habe den folgenden Code, der die folgenden zwei Probleme hat:

%Vor%

Dieser Code stammt aus einem Tutorial und im Tutorial funktioniert es gut. Ich habe Python 2.7 und verwende das PyDev-Plugin für Eclipse.

%Vor%     
arnold leki 10.01.2012, 21:29
quelle

6 Antworten

33

Dieser Code:

%Vor%

sollte nicht in der Klasse sein. Wenn Sie es nach draußen nehmen (kein Einzug), sollte es funktionieren.

Nachdem wir das berücksichtigt haben, sollte es so aussehen:

%Vor%     
kgr 10.01.2012, 21:32
quelle
22

Um zu verstehen, warum das, was Sie geschrieben haben, fehlgeschlagen ist, müssen Sie ein wenig darüber wissen, wie Klassendefinitionen in Python funktionieren. Wie Sie vielleicht wissen, ist Python eine interpretierte Sprache: Es gibt ein Programm, das Python-Dateien liest und sie so ausführt, wie es geht. Wenn der Interpreter auf eine Klassendefinition stößt, geschieht Folgendes:

  1. Erstellt einen neuen Namespace (Datensatz aller Variablennamen), in dem die Klassenvariablen und Methoden gespeichert werden.
  2. Extrahiert den gesamten Code innerhalb der Klassendefinition (wie durch seinen Einzug bestimmt) und führt diesen Code aus. Dies füllt den Namespace, den er gerade erstellt hat.
  3. Erstellt ein neues Klassenobjekt, dessen Namespace dem oben angegebenen entspricht, und mit Basisklassen, die in der Definition angegeben sind.
  4. Bindet den Namen der Klasse an dieses Objekt.

Was ist also passiert, als Sie die Funktion main innerhalb Ihres Codes eingerückt haben? In Schritt 2 haben Sie auf den Namen Animal verwiesen. Aber dieser Name wird nicht vor Schritt 4 definiert! Tatsächlich kann nicht in dem Stadium definiert werden, in dem Sie darauf Bezug genommen haben, denn das wäre zirkulär. Wenn Sie main außerhalb der Klassendefinition verschieben, wird es erst ausgeführt, nachdem die Schritte 1-4 abgeschlossen wurden. Daher wird der Name Animal bereits gebunden.

Übrigens, der Code, den Sie geschrieben haben, ist nicht gut Python. Sie sollten wahrscheinlich versuchen, ein besseres Tutorial zu finden; Die übliche Empfehlung ist "Dive Into Python". Ich habe es so umgeschrieben, wie es gemacht werden sollte:

%Vor%     
katrielalex 10.01.2012 22:07
quelle
2

Das folgende Konstrukt ist es wert, in Ihrem Code enthalten zu sein - insbesondere, wenn Sie in mehreren Umgebungen arbeiten.

%Vor%     
lap 10.01.2012 21:39
quelle
1

Verschieben Sie sowohl die main() -Methode als auch die if __name__ == '__main__' -Anweisung aus dem Gültigkeitsbereich der Klasse. Denken Sie daran - Leerzeichen zählen.

    
Makoto 10.01.2012 21:32
quelle
1

Ihr Einzug ist deaktiviert. Beachten Sie, dass in Python der Einzug zählt. Probieren Sie:

%Vor%     
chrisdotcode 10.01.2012 21:36
quelle
0

Die von Ihnen definierte Hauptfunktion sieht aus, als wäre sie innerhalb der Animal-Klasse. Main sollte eine Funktion (Klassen enthalten Methoden) außerhalb der Tierklasse sein. Sie sollten auch Ihre Klasse Animal von Objekt erben, zB

class Tier (Objekt):

    
georgealton 10.01.2012 21:39
quelle

Tags und Links