2016-08-08 19 views
-1

Hier ist die Klasse in Frage:Warum kann ich keine Instanz einer Klasse in einer Funktion erstellen?

class Hero(object): 
    def __init__(self, Name, HP, Damage): 
     self.Name = Name 
     self.HP = HP 
     self.Damage = Damage 

Hier ist die Funktion in Frage:

def GenerateHero(HeroName, HeroHP, HeroDamage): 
    MyHero = Hero(HeroName, HeroHP, HeroDamage) 

Der Eingang:

GenerateHero("Bob", 100, 10) 

Es läuft. Wenn ich versuche, „MyHero.Name“ zu tun oder ein anderes Attribut zuzugreifen, erhalte ich:

Traceback (most recent call last): 
    File "<pyshell#25>", line 1, in <module> 
    MyHero 
NameError: name 'MyHero' is not defined 
+3

Sie geben nichts von 'GenerateHero' zurück. Oder sogar diese Variable im richtigen Bereich zu erstellen. –

+2

Der Held lebt nur im Rahmen der 'GenerateHero'-Methode. – Freddy

+2

http://StackOverflow.com/Questions/291978/short-description-of-python-scoping-Rules –

Antwort

1

Wenn Sie die Variable MyHero gesetzt, wird im Rahmen der GenerateHero Funktion erstellt. Dies bedeutet, dass es nur innerhalb der GenerateHero-Funktion sichtbar ist und daher nur dort referenziert werden kann. Wenn Sie es im Außenbereich referenzieren, wird der Fehler verursacht.

Um den Helden, den Sie gerade erstellt haben, zu verwenden, lassen Sie GenerateHero den erzeugten Wert zurückgeben und diesen MyHero zuweisen.

def GenerateHero(HeroName, HeroHP, HeroDamage): 
    return Hero(HeroName, HeroHP, HeroDamage) 

MyHero = GenerateHero("Bob", 100, 10) 

print(MyHero.Name) 

# Out: Bob 

Nun ist die Variable MyHero ist im Rahmen Sie es brauchen und so können nach Belieben referenziert werden.

+0

Ich sehe! Ich werde mehr über den Umfang und seine Anwendung für Funktionen und Klassen lesen müssen. Vielen Dank – Kos