我正在将项目添加到基于文本的角色扮演游戏中。我的课程看起来像这样:
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 :(得分:3)
当存在自然的is-a关系时使用子类。
不要仅使用继承来重用代码
不要仅使用继承来获取多态性
在你的示例中,Dagger是一种武器,因此使用子类非常有意义。
如果您搜索继承与组合,或者is-a vs has -a
,您可以获得良好的阅读材料希望这有帮助
答案 1 :(得分:0)
在代码样式方面,创建子类更好,因为它允许更动态的代码库,因此您可以进一步扩展它。此外,它使您的代码更具可读性,您还可以更轻松地添加帮助消息/信息文本。但是,正如你所说,如果你只需要存储损坏,那么创建子类没有太大的好处;请记住,您还要存储武器的名称。我建议你创建子类,因为它允许进一步开发,并且更适合你的代码风格。
答案 2 :(得分:0)
这完全取决于您是否要为新创建的子类添加不同的变量。武器类的危险将带有名称,价值,损坏和描述。我会让我的不同武器有像长剑,剑,匕首,工作人员等子类。这些武器会有不同类型的武器,它们会有不同的攻击类型。匕首可能只有刺戳/刺伤,而长剑会有斜线,刺戳,也许还有某种力量斜线。