Python 不传递给对象的类属性
我正在尝试创建一个非常基本的RPG类游戏,你选择一个角色,给这个角色一件武器,然后告诉它根据角色和武器的统计数据攻击另一个角色。Python 不传递给对象的类属性,python,class,attributes,Python,Class,Attributes,我正在尝试创建一个非常基本的RPG类游戏,你选择一个角色,给这个角色一件武器,然后告诉它根据角色和武器的统计数据攻击另一个角色。武器等级属于顶级等级,称为装备。但是,当我尝试设置包含武器统计数据的攻击伤害变量时,我得到: 'Char' object has no attribute 'weapon.' 默认情况下,我将Char类武器值设置为None。但在下面,我使用dean.will=sware(这是一种武器)为角色(dean)提供了一种武器。我已经尝试将wearm.wgt更改为self.we
武器
等级属于顶级等级,称为装备
。但是,当我尝试设置包含武器统计数据的攻击伤害变量时,我得到:
'Char' object has no attribute 'weapon.'
默认情况下,我将Char
类武器值设置为None
。但在下面,我使用dean.will=sware
(这是一种武器)为角色(dean
)提供了一种武器。我已经尝试将wearm.wgt
更改为self.wearm.wgt
,但似乎没有帮助
查看代码的相关部分,忽略攻击
代码,因为我认为这与问题无关,会把事情弄得一团糟,但如果必要,我会这样做
我相信代码是一团乱,所以建设性的批评将被赞赏
代码:
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)
记住使用self
,就像在其他\uuuuu init\uuuuu
方法中一样,来生成实例的属性
def __init__(self, name):
self.name = name
self.hp = 300
...
self.weapon = None
此外,我认为其他属性也应该是实例属性,即,在\uuu init\uuuu
方法中设置它们,并使用self
,例如self.wgt
,self.impact
,self.breaked\u bones
等。请记住使用self
,就像在其他\uu init\code>方法中一样,创建实例的属性
def __init__(self, name):
self.name = name
self.hp = 300
...
self.weapon = None
此外,我认为其他属性也应该是实例属性,即,在\uuu init\uuuu
方法中设置它们,并使用self
,例如self.wgt
,self.impact
,self.breaked\u bones
等。请记住使用self
,就像在其他\uu init\code>方法中一样,创建实例的属性
def __init__(self, name):
self.name = name
self.hp = 300
...
self.weapon = None
此外,我认为其他属性也应该是实例属性,即,在\uuu init\uuuu
方法中设置它们,并使用self
,例如self.wgt
,self.impact
,self.breaked\u bones
等。请记住使用self
,就像在其他\uu init\code>方法中一样,创建实例的属性
def __init__(self, name):
self.name = name
self.hp = 300
...
self.weapon = None
另外,我认为其他属性也应该是实例属性,即,在\uuu init\uuu
方法中设置它们,并使用self
,例如self.wgt
,self.impact
,self.breaked\u 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
更改构造函数的主体,因为现在将值分配给局部变量而不是对象变量:
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
更改构造函数的主体,因为现在将值分配给局部变量而不是对象变量:
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
更改构造函数的主体,因为现在将值分配给局部变量而不是对象变量:
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
啊,有道理。好的,我回家后会试试这个,看看能不能解决问题。谢谢。好的,就这样。所以,基本上,我应该在init下把self放在所有东西的前面,看起来是这样的?另外,我现在在使用相同的代码时遇到了一个新问题。我对StackOverflow相当陌生。我应该在这里提问还是开始一个新的线程?@rrr45嗯,不是所有的,而是应该成为实例属性的所有内容。如果声明某个临时变量,则不需要使用self
。很高兴我能帮忙。如果你有一个后续问题,你应该把它作为一个新问题发布,但可能会添加一个链接到这个问题的背景。好的,太好了。再次感谢你。啊,有道理。好的,我回家后会试试这个,看看能不能解决问题。谢谢。好的,就这样。所以,基本上,我应该在init下把self放在所有东西的前面,看起来是这样的?另外,我现在在使用相同的代码时遇到了一个新问题。我对StackOverflow相当陌生。我应该在这里提问还是开始一个新的线程?@rrr45嗯,不是所有的,而是应该成为实例属性的所有内容。如果声明某个临时变量,则不需要使用self
。很高兴我能帮忙。如果你有一个后续问题,你应该把它作为一个新问题发布,但可能会添加一个链接到这个问题的背景。好的,太好了。再次感谢你。啊,有道理。好的,我回家后会试试这个,看看能不能解决问题。谢谢。好的,就这样。所以,基本上,我应该在init下把self放在所有东西的前面,看起来是这样的?另外,我现在在使用相同的代码时遇到了一个新问题。我对StackOverflow相当陌生。我应该在这里提问还是开始一个新的线程?@rrr45嗯,不是所有的,而是应该成为实例属性的所有内容。如果声明某个临时变量,则不需要使用self
。很高兴我能帮忙。如果你有一个后续问题,你应该把它作为一个新问题发布,但可能会添加一个链接到这个问题的背景。好的,太好了。再次感谢你。啊,有道理。好的,我回家后会试试这个,看看能不能解决问题。谢谢。好的,就这样。所以,基本上,我应该在init下把self放在所有东西的前面,看起来是这样的?另外,我现在在使用相同的代码时遇到了一个新问题。我对StackOverflow相当陌生。我应该在这里提问还是开始一个新的线程?@rrr45嗯,不是所有的,而是应该成为实例属性的所有内容。如果声明某个临时变量,则不需要使用self
。很高兴我能帮忙。如果你有一个后续问题,你应该把它作为一个新问题发布,但可能会添加一个链接到这个问题的背景。好的,太好了。再次感谢你。