main-Methode in Python
Ich habe den folgenden code, die die folgenden zwei Probleme:
Traceback (most recent call last):
File "C:\Users\v\workspace\first\src\tests.py", line 1, in <module>
class Animal:
File "C:\Users\v\workspace\first\src\tests.py", line 39, in Animal
File "C:\Users\v\workspace\first\src\tests.py", line 31, in main
dog = Animal()
NameError: global name 'Animal' is not defined
Dieser code stammt aus einem tutorial und das tutorial funktioniert es einwandfrei. Ich habe Python 2.7 und verwenden Sie den PyDev plugin für Eclipse.
class Animal:
__hungry = "yes"
__name = "no name"
__owner = "no owner"
def __init__(self):
pass
def set_owner(self,newOwner):
self.__owner= newOwner
return
def get_owner(self):
return self.__owner
def set_name(self,newName):
self.__name= newName
return
def get_name(self):
return self.__name
def noise(self):
print('errr')
return
def __hiddenmethod(self):
print("hard to find")
def main():
dog = Animal()
dog.set_owner('Sue')
print dog.get_owner()
dog.noise()
if __name__ =='__main__':main()
- Hören Sie Daniel und blicken auf das
@property
Dekorateur in Python. Sie müssen nicht zu schreiben, Getter und setter so. - Auch nicht mit einem doppelten Unterstrich von Namen -- Sie sind da, für einen ganz bestimmten Anwendungsfall. Wenn Sie möchten, um anzuzeigen, dass eine Eigenschaft "nur für den internen Gebrauch", dann verwenden Sie single-und unterstreicht statt.
- Auch sollten Sie schreiben
class Animal(object):
. Der Grund, warum Sie dies tun sollten, ist unwichtig und technische (rückwärts-Kompatibilität mit sehr alten Versionen von Python), und in Python 3.x Sie müssen nicht mehr.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diesem code:
sollte nicht in der Klasse. Wenn Sie es außerhalb (kein Gedankenstrich) sollte es funktionieren.
Also nach der Einnahme, die zu berücksichtigen, es sollte so Aussehen:
Verstehen warum was du geschrieben hast, ist fehlgeschlagen, müssen Sie wissen, ein wenig über die Klassen-Definitionen arbeiten mit Python. Wie Sie vielleicht wissen, ist Python eine interpretierte Sprache ist: es ist ein Programm, das liest Python-Dateien und führt Sie aus, wie es geht. Wenn der interpreter auf eine Klassendefinition, geschieht Folgendes:
Also, was passiert, wenn Sie eingerückt die
main
- Funktion in Ihrem code? Während in Schritt 2, Sie bezeichnet den NamenAnimal
. Aber dieser name ist nicht definiert, bis Schritt 4! In der Tat, es nicht definiert werden, auf die Bühne, die Sie genannt es, denn das wäre zirkulär. Wenn Sie sich bewegenmain
außerhalb der Klassendefinition, es wird nicht ausgeführt werden, bis, nachdem Sie die Schritte 1-4 abgeschlossen haben, und daher der nameAnimal
bereits gebunden.Durch die Art und Weise, den code, den Sie geschrieben haben, ist nicht gut Python. Sie sollten wahrscheinlich versuchen zu finden ein besseres tutorial; die übliche Empfehlung ist "Dive Into Python". Ich habe umgeschrieben, wie es getan werden sollte:
Dem folgenden Konstrukt lohnt sich in den meisten Ihres Codes - insbesondere wenn Sie in mehreren Umgebungen.
Bewegen
main()
- Methode und dieif __name__ == '__main__'
Auszug aus dem Gültigkeitsbereich der Klasse. Denken Sie daran - Leerzeichen zählt.Ihrem Einzug aus. Denken Sie daran, dass in Python, Einrückungen zählt. Versuchen:
Die main-Funktion, die Sie definiert haben, wie es aussieht, ist innerhalb der Tier-Klasse. Main sollte eine Funktion sein(Klassen enthalten Methoden), die außerhalb des Tier-Klasse. Sie sollten auch Ihre Klasse Tier Erben von object, ie
Klasse Tier(object):