AttributeError:' RangedWeapon'对象没有属性' owner'

时间:2017-04-06 10:16:07

标签: python python-3.x oop

Person对象中,已经存在对清单的支持,当Person对象采用Weapon对象或Food对象时,对象将会运行到库存。对于Tribute对象,我想通过在WeaponTribute中创建一个新方法来检索清单中的get_weapons()个对象,该方法将返回{的元组{1}} Weapon当前在其广告资源中的对象。

Tribute

但我一直在class Tribute(Person): ... def get_weapons(self): self.weapons=[] for item in self.get_inventory(): if isinstance(item,Weapon): self.weapons.append(item) return tuple(self.weapons) cc = Tribute("Chee Chin", 100) chicken = Food("chicken", 5) aloe_vera = Medicine("aloe vera", 2, 5) bow = RangedWeapon("bow", 4, 10) sword = Weapon("sword", 2, 5) Base = Place("base") Base.add_object(cc) Base.add_object(chicken) Base.add_object(aloe_vera) Base.add_object(bow) Base.add_object(sword) cc.take(bow) # Chee Chin took bow cc.take(sword) # Chee Chin took sword cc.take(chicken) # Chee Chin took chicken cc.take(aloe_vera) # Chee Chin took aloe_vera 。我不确定出了什么问题。我真的很感激一些帮助。谢谢!

AttributeError: 'RangedWeapon' object has no attribute 'owner'

1 个答案:

答案 0 :(得分:2)

不是python 3.x的专家,但是:

class Weapon(Thing):

def __init__(self, name, min_dmg, max_dmg):
    self.name=name
    self.min_dmg=min_dmg
    self.max_dmg=max_dmg

你从未真正设置武器继承Thing - 你需要在Weapon的ctor中调用适合Thing的super().__init__行。这是一个恼人的蟒蛇怪癖。

看看这里 - 在RangedWeapon的ctor - 你做得对:

 super().__init__(name, min_dmg, max_dmg)