我正在尝试创建一个非常基本的类似RPG的游戏,你可以选择一个角色,给角色一个武器,然后告诉它根据角色和武器的属性攻击另一个角色。 weapon
类属于名为Equip
的顶级类。但是,当我尝试设置包含武器统计数据的攻击伤害变量时,我得到:
'Char' object has no attribute 'weapon.'
我将Char
类weapon
值设置为None
作为默认值。但是下面,我使用dean
(dean.weapon = sword
)给角色(weapon
)一个武器。我已尝试将weapon.wgt
更改为self.weapon.wgt
,但这似乎没有帮助。
查看代码的相关部分,省略attack
代码,因为我不认为它与问题相关并且会使事情变得混乱,但如果有必要,我会这样做。
我认为代码是一团糟,所以建设性的批评将会受到赞赏。
代码:
class Char(object):
def __init__(self, name):
name = name
hp = 300
mp = 10
strn = 1
dmg = 1
dex = 1
armor = 0
weapon = None
attack_speed = dex
intact_bones = ["right arm", "left arm", "right leg", "leg leg", "skull", "sternum", "nose"] # JUST ASSUME RIGHT SIDE IS PRIMARY SIDE FOR NOW
broken_bones = [] ### define what to do per bone if bone is in this list
dmg = strn * self.weapon.wgt
class Equip(object):
wgt = 1
desc = ""
def __init__(self, name):
self.name = name
class weapon(Equip):
impact = 1
sharp = 1
def __init__(self, name):
self.name = name
sword = weapon("Sword")
sword.wgt = 10
sword.impact = 6
sword.sharp = 7
dean.weapon = sword
dean.attack(hamilton)
答案 0 :(得分:2)
请记住,与其他self
方法一样,使用__init__
来制作实例的属性。
def __init__(self, name):
self.name = name
self.hp = 300
...
self.weapon = None
另外,我认为其他属性也应该是实例属性,即在__init__
方法中设置它们并使用self
,例如self.wgt
,self.impact
,self.broken_bones
等
答案 1 :(得分:1)
更改构造函数的主体,因为现在您要将值赋给局部变量而不是对象变量:
def __init__(self, name):
self.name = name
self.hp = 300
self.mp = 10
self.strn = 1
self.dmg = 1
self.dex = 1
self.armor = 0
self.weapon = None