在Person
对象中,已经存在对清单的支持,当Person
对象采用Weapon
对象或Food
对象时,对象将会运行到库存。对于Tribute
对象,我想通过在Weapon
类Tribute
中创建一个新方法来检索清单中的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'
答案 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)