2016-08-08 101 views
-1

這裏是有問題的類:爲什麼我不能在函數內創建類的實例?

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

這裏是有問題的功能:

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

輸入:

GenerateHero("Bob", 100, 10) 

它運行。當我嘗試做「MyHero.Name」或訪問任何其他屬性,我得到:

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

你沒有從'GenerateHero'返回任何東西。甚至在正確的範圍內創建該變量。 –

+2

英雄只存在於'GenerateHero'方法的範圍內。 – Freddy

+2

http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules –

回答

1

當你設置變量MyHero,它在GenerateHero功能的範圍內創建。這意味着它只在GenerateHero函數中可見,所以只能在那裏引用。在外面引用它會導致你遇到的錯誤。

爲了使用剛剛生成的英雄,讓GenerateHero返回它生成的值,並將其分配給MyHero。

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

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

print(MyHero.Name) 

# Out: Bob 

現在變量MyHero在您需要的範圍內,因此可以隨意引用。

+0

我明白了!我將不得不閱讀更多關於範圍以及它如何適用於函數和類。謝謝 – Kos

相關問題