[英]Class attributes not passing to objects
我正在尝试创建一个非常基本的类似于RPG的游戏,在该游戏中,您选择一个角色,为该角色提供武器,然后根据该角色和武器的状态告诉它攻击另一个角色并造成伤害。 weapon
类属于称为Equip
的顶级类。 但是,当我尝试设置包含武器统计信息的攻击力变量时,我得到:
'Char' object has no attribute 'weapon.'
我将Char
类weapon
值默认设置为None
。 但是下面,我通过使用dean.weapon = sword
(这是一种weapon
)为角色( dean
)提供了weapon
。 我尝试将weapon.wgt
self.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)
记住要像其他__init__
方法一样使用self
来创建实例的属性。
def __init__(self, name):
self.name = name
self.hp = 300
...
self.weapon = None
另外,我认为其他属性也应该是实例属性,即在__init__
方法中设置它们并使用self
,例如self.wgt
, self.impact
, self.broken_bones
等。
更改构造函数的主体,因为现在您正在将值分配给局部变量而不是对象变量:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.