在过去的几周里,我一直在尽可能多地学习 OOP,并且我学到了很多东西,但是我不确定这一点,我的类层次结构应该是什么样的?
想象两个类,这是一个Level
类:
class Level(object):
def __init__(self, level, exp):
self.level = level
self.exp = exp
@property
def required_exp(self, level=None):
return 80 + 40 * (level or self.level)
def add_exp(self, exp):
self.exp += exp
while self.exp >= self.required_exp:
self.exp -= self.required_exp
self.level += 1
显然它也有其他一些方法,但这是基本思想。
现在调用第二类Player
。它具有一些属性,例如:name
, health
, level
, experience points
, damage
, 等。
到目前为止,我所学到的(SO 上有人这么说)是在我不确定是使用继承(is-a
-relationship)还是属性(has-a
-relationship)时问自己一个问题。问题是:玩家是一个级别,还是玩家有一个级别?
嗯……两者都不是。玩家肯定不是一个级别,我敢肯定。玩家有它的等级,但等级不等于Level
等级。相反,玩家有等级和经验值,它们都是Level
类的属性。您还可以将经验值添加到 Player,因此从Level
.
作为旁注,这些命名对我来说也没有任何意义。有类似的东西是有意义的:Level.increase(self)
将 Level 增加一。然而,对于玩家来说,调用 会更有意义Player.level_up(self)
,因为大多数(所有?)rpg 游戏都使用。调用Player.increase(self)
没有任何意义,你不能增加Player
一级,你正在增加它的级别。话又说回来,打电话Level.level_up(self)
也没有多大意义......
所以,我认为我应该像使用Level
接口一样使用它并从中继承Player
(和其他子类),但我不确定所以我决定问你,因为无论如何我是来学习的。我应该怎么办?什么是最合适的使用Level
方式Player
?