为什么我不能在函数内创建类的实例?

时间:2016-08-08 18:58:10

标签: python python-3.x oop object

以下是有问题的课程:

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

1 个答案:

答案 0 :(得分: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位于您需要的范围内,因此可以随意引用。