知道何时创建类的实例而不是创建子类?

时间:2016-07-10 22:29:28

标签: python oop

我正在将项目添加到基于文本的角色扮演游戏中。我的课程看起来像这样:

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()类的实例有什么好处,因为我没有其他属性可以添加到单个武器中?

感谢您的帮助,我希望这篇文章很清楚。

3 个答案:

答案 0 :(得分:3)

当存在自然的is-a关系时使用子类。

不要仅使用继承来重用代码

不要仅使用继承来获取多态性

在你的示例中,Dagger是一种武器,因此使用子类非常有意义。

如果您搜索继承与组合,或者is-a vs has -a

,您可以获得良好的阅读材料

希望这有帮助

答案 1 :(得分:0)

在代码样式方面,创建子类更好,因为它允许更动态的代码库,因此您可以进一步扩展它。此外,它使您的代码更具可读性,您还可以更轻松地添加帮助消息/信息文本。但是,正如你所说,如果你只需要存储损坏,那么创建子类没有太大的好处;请记住,您还要存储武器的名称。我建议你创建子类,因为它允许进一步开发,并且更适合你的代码风格。

答案 2 :(得分:0)

这完全取决于您是否要为新创建的子类添加不同的变量。武器类的危险将带有名称,价值,损坏和描述。我会让我的不同武器有像长剑,剑,匕首,工作人员等子类。这些武器会有不同类型的武器,它们会有不同的攻击类型。匕首可能只有刺戳/刺伤,而长剑会有斜线,刺戳,也许还有某种力量斜线。