2016-07-10 143 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

希望这有助于