2013-10-18 172 views
0

我正在嘗試創建一個非常基本的類RPG遊戲,您可以在其中選擇一個角色,給該角色一個武器,然後根據該角色的統計信息告訴其攻擊另一個角色性格和武器。 weapon類屬於稱爲Equip的頂級類。當我嘗試但是設置結合了武器的統計攻擊損傷變量,我得到:不傳遞給對象的類屬性

'Char' object has no attribute 'weapon.' 

我有Charweapon值設置爲None爲默認值。但在下面,我使用dean.weapon = sword(這是一個weapon)給出了字符(dean)的武器。我試過將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) 

回答

2

記住使用self,在你的其他__init__方法,使實例的屬性。

def __init__(self, name): 
    self.name = name 
    self.hp = 300 
    ... 
    self.weapon = None 

另外,我覺得其他屬性也應該是實例屬性,即,將它們設置在__init__方法和使用self,例如self.wgtself.impactself.broken_bones等構造體

+0

嗯,有道理。好吧,當我回家後,我會試試這個,看看是否能解決這個問題。謝謝。 – rrr45

+0

好的,就是這樣。所以,基本上,我通常應該把自己置於__init__之下的所有內容之前,看起來像? 此外,我現在有一個相同的代碼的新問題。我對StackOverflow相當陌生。我應該問這裏還是開始一個新線程? – rrr45

+0

@ rrr45好吧,不是_everything_,而是應該是實例屬性的所有東西。如果你聲明瞭一些臨時變量,你不需要使用'self'。很高興我能幫上忙。如果您有後續問題,則應將其作爲新問題發佈,但也可以在上下文中添加此問題的鏈接。 –

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 
相關問題