我有这个代码给了我奇怪的错误。下面你应该看到该代码。 首先我有我的CombatEngine,基本上只是模拟玩家和敌人列表之间的射击。在TheBridge类中,我创建了一个combatengine的实例并在构造函数中给它一个敌人列表(我主要在c#中编码)但是当我在引擎上运行战斗方法时会返回错误
AttributeError:类型对象'GothonTrooper'没有属性'health'
我真的不明白为GothonTrooper类明确定义了健康状况是怎么可能的。我认为当从randint函数中找到单个敌人时,战斗方法本身会发生错误。
class TheBridge(Scene):
def __init__(self):
enemies = [GothonTrooper(), GothonTrooper(), GothonTrooper(), GothonTrooper, GothonTrooper()]
self.the_bridge_combat = CombatEngine(enemies)
...
class CombatEngine(object):
def __init__(self, enemies):
self.enemies = enemies
while len(self.enemies) != 0:
enemy = self.enemies[randint(0, len(self.enemies)-1)]
print "You shoot at the Gothon."
hit_or_miss = PLAYER.attack()
if hit_or_miss >= 5:
print "The shot hits the Gothon!"
enemy.health -= 10
print "The Gothon is down to %s health" % enemy.health
...
class GothonTrooper(Humanoid):
def __init__(self):
self.health = 100
def attack(self):
return randint(1,10)
答案 0 :(得分:1)
假设您在代码中提供的内容不是拼写错误,则()
列表中某个GothonTrooper
对象中缺少的enemies
是罪魁祸首。没有它,该对象永远不会被实例化。因此,该项目还没有health
属性。
为了更好地说明问题源自何处,下面的示例使用dir
方法返回该对象上可用的属性,(注意第二个health
上缺少print
线)
>>> class Trooper():
def __init__(self):
self.health = "90%"
>>> enemies = [Trooper(), Trooper]
>>> for enemy in enemies:
print(dir(enemy))
[..., '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'health']
[..., '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
答案 1 :(得分:1)
抱歉,我的英语很差。看看你的定义,第四个GothonTrooper
没有()
,以便
AttributeError:
类型对象GothonTrooper
没有属性health
enemies = [GothonTrooper(), GothonTrooper(), GothonTrooper(), GothonTrooper, GothonTrooper()]