2

我正在学习 python 并试图根据角色的热区编写一个伤口系统。这是我写的。不要过多评价我。

class Character:
    def __init__ (self, agility, strength, coordination):
            self.max_agility = 100
            self.max_strength = 100
            self.max_coordination = 100
            self.agility = agility
            self.strength = strength
            self.coordination = coordination

    def hit (self, hit_region, wound):
            self.hit_region = hit_region
            self.wound = wound

            #Hit Zones
            l_arm=[]
            r_arm=[]
            l_leg=[]
            r_leg=[]
            hit_region_list = [l_arm , r_arm, l_leg, r_leg]


            #Wound Pretty Names
            healthy = "Healthy"
            skin_cut = "Skin Cut"
            muscle_cut = "Muscle Cut"
            bone_cut = "Exposed Bone"

            hit_region.append(wound)              

john = Character(34, 33, 33)

john.hit(l_arm, skin_cut)

我希望 skin_cut 输入被识别为“Skin Cut”,然后添加到我定义为列表的 l_arm。但是,我总是收到名称错误(未定义 l_arm)。如果我用'wound'作为第一个参数重写方法,名称错误现在带有未定义的'wound'。这告诉我这是我错过的课程结构中的一些东西,但我不知道是什么。

4

3 回答 3

1

l_arm仅在函数中定义及其本地函数。它仅具有功能范围。只能在函数内部访问。

您尝试访问l_arm外部函数,并且给出错误,l_arm未定义。

如果你想在函数外访问所有这些变量,你可以在上面定义它class

#Hit Zones
l_arm=[]
r_arm=[]
l_leg=[]
r_leg=[]
hit_region_list = [l_arm , r_arm, l_leg, r_leg]


#Wound Pretty Names
healthy = "Healthy"
skin_cut = "Skin Cut"
muscle_cut = "Muscle Cut"
bone_cut = "Exposed Bone"

class Character:
    ...
    ...
    ...

john = Character(34, 33, 33)

john.hit(l_arm, skin_cut)

这将起作用。

于 2016-03-20T02:39:03.617 回答
1

我改变了我之前的答案。

class Character:
def __init__ (self, agility, strength, coordination):
        self.max_agility = 100
        self.max_strength = 100
        self.max_coordination = 100
        self.agility = agility
        self.strength = strength
        self.coordination = coordination
        self.l_arm=[]
        self.r_arm=[]
        self.l_leg=[]
        self.r_leg=[]
        self.hit_region_list = [self.l_arm , self.r_arm, self.l_leg, self.r_leg]
        self.healthy = "Healthy"
        self.skin_cut = "Skin Cut"
        self.muscle_cut = "Muscle Cut"
        self.bone_cut = "Exposed Bone"

def hit (self, hit_region, wound):
        self.hit_region = hit_region
        self.wound = wound
        hit_region.append(wound)
        #Hit Zones



        #Wound Pretty Names




john = Character(34, 33, 33)

john.hit(john.l_arm,john.skin_cut)

print john.hit_region
print john.l_arm

运行上面的代码后,我得到了这个输出

output:
['Skin Cut']
['Skin Cut']

根据帖子,我认为这就是您想要的。根据您之前的代码,您的声明只能在函数内部访问。现在,您可以通过在构造函数中声明它们来操作特定实例的数据和这些变量。

于 2016-03-20T02:40:09.443 回答
0

一旦函数结束,函数内分配的每个局部变量都会被丢弃。您需要在self.这些名称前面加上前缀,以便将它们保存为实例变量,例如self.l_arm,self.r_arm等。如果您打算稍后使用这些对象,那么伤口漂亮的名称也是如此。

于 2016-03-20T02:37:22.350 回答