2016-07-10 201 views
2

我正在將項目添加到正在製作的基於文本的RPG中。我的課是這樣的:知道何時通過創建子類創建類的實例?

class Item(object): 
    def __init__(self, name, value, description): 
     self.name = name 
     self.value = value 
     self.description = description 

class Weapon(Item): 
    def __init__(self, name, value, damage, description): 
     self.damage = damage 
     super(Weapon, self).__init__(name, value, description) 

我的球員的庫存是與代表不同的遊戲項目組鍵的字典:

class Player(object): 
    def __init__(self, inventory, ...): 
     self.inventory = {'weapons': []} 
hero = Player() 

的問題是,觀看教程的時候,他們有我做一個類將項目作爲這樣的:和

class Dagger(Weapon): 
    def __init__(...) 
     ... 

它添加到我的庫存hero.inventory['weapons'].append(Dagger())

我的問題是:創建像Dagger()這樣的新子類是否對創建Weapon()類的實例有好處,因爲我沒有其他屬性可以添加到單個武器中?

感謝您的任何幫助,我希望這個帖子是明確的。

回答

0

就代碼風格而言,創建子類更好,因爲它允許使用更動態的代碼庫,以便進一步擴展它。另外,它使您的代碼更具可讀性,並且您還可以更輕鬆地添加幫助消息/信息文本。但是,正如你所說的,如果你只需要存儲損壞,那麼創建子類沒有太大的優勢。請記住,您還需要存儲武器的名稱。我建議你創建子類,因爲它允許進一步的開發,並且更適合你的代碼風格。

0

這一切都取決於如果你想添加不同的變量到新創建的子類。危險會帶上武器級別的名稱,價值,傷害和描述。我會讓我的不同武器擁有像長劍,劍,匕首,職員等等的子類。這些將會針對不同類型的武器具有不同的攻擊類型。匕首可能只有刺戳/刺,而長劍會有斜線,刺戳,也可能是某種力量斜線。

3

當存在自然的is-a關係時使用子類。

不要使用繼承只是爲了讓代碼重用

不要使用繼承只是爲了獲得多態性

在您的例子情況下匕首是一種武器,所以它非常有意義使用子類。

如果搜索繼承VS組成你可以得到很好的閱讀材料,或者是-A對具有-A

希望這有助於