2017-07-14 730 views
2

我一直在尝试做一个游戏,但是这个错误不断出现。我是python的初学者,所以我希望你们甚至可以看看这个可怕的代码。AttributeError:'函数'对象没有属性

AttributeError: 'function' object has no attribute 'armorEquipped' 

我很困惑这是什么意思,但有人可以解释给我吗?

normalarmor={ 
"TRAINING ARMOR":["Armor meant for training","no element", +10, " health"]} 

firearmor={ 
    "LIGHTBRINGER":["Armor that brings light", "Fire element", +10, " health, Grass type deals less damage"]} 

def equipArmor(): 
    print() 
    m= True 
    while m==True: 
     z=True 
     armorInInventory= len(normalarmor) + len(firearmor) +len(airarmor) +len(grassarmor)+len (waterarmor) 
     armorInInventory=int(armorInInventory) 
     print ("You have", armorInInventory, "armors") 
     print ("You have these armors:") 
     for name6 in airarmor: 
      print(name6) 
     for name2 in normalarmor: 
      print(name2) 
     for name3 in firearmor: 
      print (name3) 
     for name7 in grassarmor: 
      print (name7) 
     for name9 in waterarmor: 
      print (name9) 
     print ("Which armor would you like to equip or view") 
     equipArmor.armorEquipped=input() 
     equipArmor.armorEquipped= equipArmor.armorEquipped.upper() 
     if (equipArmor.armorEquipped in normalarmor or 
      equipArmor.armorEquipped in waterarmor or 
      equipArmor.armorEquipped in firearmor or 
      equipArmor.armorEquipped in airarmor or 
      equipArmor.armorEquipped in grassarmor): 
      if equipArmor.armorEquipped in normalarmor: 
       print (normalarmor[equipArmor.armorEquipped]) 
       while z== True: 
        print ("Equip? Yes or No") 
        variable1= input() 
        variable1=variable1.upper() 
        if variable1== "YES": 
         print (equipArmor.armorEquipped, "Equipped") 
         m= False 
         z= False 
        elif variable1 == "NO": 
         z= False 

         m=True 
        else: 
         print ("That is not a valid answer") 
         z=True 
      if equipArmor.armorEquipped in firearmor: 
       print (firearmor[equipArmor.armorEquipped]) 
       while z== True: 
        print ("Equip? Yes or No") 
        variable1= input() 
        variable1 =variable1.upper() 
        if variable1== "YES": 
         print (equipArmor.armorEquipped, "Equipped") 
         m= False 
         z= False 
        elif variable1 == "NO": 
         z= True 
        else: 
         print ("That is not a valid answer") 
         z=True 
      if equipArmor.armorEquipped in airarmor: 
       print (airarmor[armorEquipped]) 
       while z== True: 
        print ("Equip? Yes or No") 
        variable1= input() 
        variable1=variable1.upper() 
        if variable1== "YES": 
         print (armorEquipped, "Equipped") 
         z= False 
         m=False 
        elif variable1 == "NO": 
         z= False 
         m=True 
        else: 
         print ("That is not a valid answer") 
         z=True 
      if equipArmor.armorEquipped in grassarmor: 
       print (grassarmor[equipArmor.armorEquipped]) 
       while z== True: 
        print ("Equip? Yes or No") 
        variable1= input() 
        variable1= variable1.upper() 
        if variable1== "YES": 
         print (equipArmor.armorEquipped, "Equipped") 
         x= False 
        elif variable1 == "NO": 
         m=True 
         z= False 
        else: 
         print ("That is not a valid answer") 
         z=True 
      if equipArmor.armorEquipped in waterarmor: 
       print (waterarmor[equipArmor.armorEquipped]) 
       while z== True: 
        print ("Equip? Yes or No") 
        variable1= input() 
        variable1= variable1.upper() 
        if variable1== "YES": 
         print (equipArmor.armorEquipped, "Equipped") 
         x= False 
        elif variable1 == "NO": 
         m=True 
         z= False 
        else: 
         print ("That is not a valid answer") 
         z=True 

,并在这里弄乱:

def tutorial(): 
    x=True 
    uhealth= normalarmor[equipArmor.armorEquipped][2]+uhealth 

为什么这个问题出现,什么是这个问题? 请帮帮我!

+0

如何在代码中定义'equipArmor'? –

+0

哎呀,我忘了分享代码的主要代码。对不起! – TheGamerCow

回答

4

首先,让我们切入追逐场景。虽然它可能在函数内出现一个函数的属性,但这并没有达到人们所期望的效果。但是,该功能的属性可以设置为以外。

>>> def f(): 
...  f.a = 1 
...  return 42 
... 
>>> f.a 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
AttributeError: 'function' object has no attribute 'a' 
>>> f.b = 2 
>>> f.b 
2 

虽然我并不清楚你要完成它可能是__call__可能做什么。现在这个class的对象就像一个函数,同时该函数可以设置对象的属性。

>>> class EquipArmour: 
...  def __call__ (self, param): 
...   if param == 1: 
...    self.armourEquipped = 52 
...   else: 
...    self.armourEquipped = -34 
... 
>>> equiparmour = EquipArmour() 
>>> result = equiparmour(1) 
>>> if equiparmour.armourEquipped == 34: 
...  'say hello' 
... 
+0

我不完全明白你的答案。 t确定__call__的作用 – TheGamerCow

+0

'__call__'是对象内Python的特殊名称之一。在这个代码中,我写了'equiparmour(1)',这实际上就像写'equiparmour(1).__ call __(1)'。但可爱的是'equiparmour'是一个**对象**。与函数不同,它可以有属性(和其他方法)。这意味着虽然我无法在对象中的函数I ** can **中设置属性,如'armourEquipped'。但我仍然可以像使用函数一样使用该对象。我从两个世界得到了一些东西,这就是你想要的东西。如果这还不清楚,请继续询问。 –

0

@TheGamerCow我有一个24" 屏幕,但您的代码跑了它

我把它换成像这样:multiline conditions

if (equipArmor.armorEquipped in normalarmor or 
     equipArmor.armorEquipped in waterarmor or 
     equipArmor.armorEquipped in firearmor or 
     equipArmor.armorEquipped in airarmor or 
     equipArmor.armorEquipped in grassarmor): 

在检查造型

相关问题