Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不传递给对象的类属性_Python_Class_Attributes - Fatal编程技术网

Python 不传递给对象的类属性

Python 不传递给对象的类属性,python,class,attributes,Python,Class,Attributes,我正在尝试创建一个非常基本的RPG类游戏,你选择一个角色,给这个角色一件武器,然后告诉它根据角色和武器的统计数据攻击另一个角色。武器等级属于顶级等级,称为装备。但是,当我尝试设置包含武器统计数据的攻击伤害变量时,我得到: 'Char' object has no attribute 'weapon.' 默认情况下,我将Char类武器值设置为None。但在下面,我使用dean.will=sware(这是一种武器)为角色(dean)提供了一种武器。我已经尝试将wearm.wgt更改为self.we

我正在尝试创建一个非常基本的RPG类游戏,你选择一个角色,给这个角色一件武器,然后告诉它根据角色和武器的统计数据攻击另一个角色。
武器
等级属于顶级等级,称为
装备
。但是,当我尝试设置包含武器统计数据的攻击伤害变量时,我得到:

'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
。很高兴我能帮忙。如果你有一个后续问题,你应该把它作为一个新问题发布,但可能会添加一个链接到这个问题的背景。好的,太好了。再次感谢你。