繁体   English   中英

类属性不传递给对象

[英]Class attributes not passing to objects

我正在尝试创建一个非常基本的类似于RPG的游戏,在该游戏中,您选择一个角色,为该角色提供武器,然后根据该角色和武器的状态告诉它攻击另一个角色并造成伤害。 weapon类属于称为Equip的顶级类。 但是,当我尝试设置包含武器统计信息的攻击力变量时,我得到:

'Char' object has no attribute 'weapon.'

我将Charweapon值默认设置为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.wgtself.impactself.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM