基本和当前与基本和偏移?

我有一个Attribute类,可以表示类似speed或的不同属性armor。Attribute具有base,offset和和current值。这是使用示例最容易解释的示例,我将使用它speed作为示例。


speed = Attribute()。现在速度已经base很有价值,它就是玩家移动的速度。当我为球员配备更好的跑鞋时,他可获得50的额外速度。这意味着offset下注将设置为50。现在,当有人抛出使您减速10的咒语时,偏移量将变为50 - 10 = 40。属性类如下所示:


class Attribute(object):

    def __init__(self, base):

        self.base = base

        self.offset = 0


    @property

    def current(self):

        return self.base + self.offset


    @current.setter

    def current(self, value):

        self.offset = 0 - (self.base - value)

现在,一个其他的方式来表示,这将是使用base,并current与具有offset作为一个属性:


class Attribute(object):

    def __init__(self, base):

         self.base = base

         self.current = base


    @property

    def offset(self):

         return 0 - (self.base - self.current)


    @offset.setter

    def offset(self, value):

         self.current = self.health + value

它们两者都以完全相同的方式工作,是否有理由在一个之上使用另一个?


牛魔王的故事
浏览 159回答 2
2回答

至尊宝的传说

这完全取决于您对哪种操作进行更多的调整。您改变的current频率是否比改变的频率高offset?Python中没有首选的方法,但是程序中可能有一种方法。根据您的示例,似乎您正在创建一个人们与他人互动的游戏。您提到了armor,speed玩家,并且被减速咒语击中。当你的球员得到由咒语放缓,你不想设置自己speed的东西,你想减少它。使用偏移量很容易做到这一点,这正是它的用途。但是,这也可以使用current来完成,并且两者的代码完全相同,即使含义不同:speed.current -= 10。如果您想做一个相对较慢的动作(例如,将他的速度降低10%,而不是10mph),则可能会再次使用当前值:speed.current *= 0.9。再一次,这两个都可以通过以下offset版本实现:speed.offset -= 10 // reduce by 10speed.offset = speed.current * 0.9 - speed.base // reduce by 10%正如我们在此处看到的那样,使用current相对缓慢可以使代码更易于阅读,并且大多数人会speed.current -= 50比看到更明显speed.offset -= 50。current在进行相对缓慢的操作时,它的使用速度也更快,因为计算出的东西更少。因此,您可能经常需要两者,而且两者都不比另一个优越。我仍然会说和Crocker所说的一样,与一起使用current,可能对每个人都更容易理解,并且在进行相对减慢时会更清洁。

BIG阳

我更喜欢第一个变体,其中base和offset是实际值,current是计算出的有效值。但是,我不会添加设置器,因为该设置器应设置基本值还是偏移量是不确定的。请将有效值保留为只读。另外,我至少会考虑将修饰符做成一个列表,这样可以更容易实现和调试。考虑增加速度的运动鞋,给+50。然后,喝一点药水,给予+ 10%。然后您再次脱下运动鞋,最后药水用完了。如果您使用此方法使此代码正确,那么它将在修改属性的位置将所有逻辑都包含在属性的外部。这只是我的直觉,您必须自己做出决定,因为只有您知道真正的代码及其应采取的措施。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python