2013-03-23 120 views
-1

我在教自己的Python,並且我已經到達了我正在圍繞類的環節。我決定建立一個基本的角色扮演遊戲,以便利用列表,詞典和類來進行練習。這裏是我的英雄代碼,我只想對我出錯的地方有一些批判性反饋,以及如何改進。Python類設計反饋

class Hero(): 
    """docstring for Hero""" 
    def __init__(self, hp, mp, strength, defence, level, armour): 
     self.hp = hp 
     self.mp = mp 
     self.strength = strength 
     self.defence = defence 
     self.level = level 
     self.armour = armour 

Knight = Hero(100, 25, 5, 10, 1, 5): 

我想英雄的水平來修改hp,mp等。參數可以相互修改嗎?我知道這是很多問題,但我想確保我在第一時間儘可能做到正確。謝謝閱讀!

+1

你最好實施不同類型的英雄作爲子類。 – 2013-03-23 22:55:59

+4

通常,有關工作代碼的問題更適合'codereview.stackexchange' – mgilson 2013-03-23 22:56:05

回答

2

您可以defence屬性:

class Hero(): 
    """docstring for Hero""" 
    def __init__(self, hp, mp, strength, defence, level, armour): 
     self.hp = hp 
     self.mp = mp 
     self.strength = strength 
     self.level = level 
     self.armour = armour 

    @property 
    def defence(self): 
     return 3.14159 * self.level * self.armour 

您仍然可以使用knight.defence訪問它,但根據對象的級別和護甲值的變化。

+0

但是,如果您已經在構造函數中定義了'self.defence',那麼屬性將不會被使用,對吧? – 2013-03-23 23:05:48

+0

@ A.Rodas:謝謝,我忘了將它刪除。 – Blender 2013-03-23 23:12:14

+0

這太不可思議了我從來沒有見過@property之前,我很高興這使得事情變得更容易在我的腦海中可視化現在謝謝你。 – 2013-03-23 23:36:09

1

__init__中的代碼可以做任何你想要的。例如:

def __init__(self, hp, mp, strength, defence, level, armour): 
    self.hp = hp * level 
    self.mp = mp**(level/10) 
    self.strength = strength 
    if level > 5:  
     self.defence = defence 
    else: 
     self.defence = defence/2 
    self.level = level 
    self.armour = armour