为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牛魔王的故事 2021-03-12 14:11:25
我有一个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它们两者都以完全相同的方式工作,是否有理由在一个之上使用另一个?
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

这完全取决于您对哪种操作进行更多的调整。您改变的current频率是否比改变的频率高offset?Python中没有首选的方法,但是程序中可能有一种方法。


根据您的示例,似乎您正在创建一个人们与他人互动的游戏。您提到了armor,speed玩家,并且被减速咒语击中。当你的球员得到由咒语放缓,你不想设置自己speed的东西,你想减少它。使用偏移量很容易做到这一点,这正是它的用途。但是,这也可以使用current来完成,并且两者的代码完全相同,即使含义不同:speed.current -= 10。


如果您想做一个相对较慢的动作(例如,将他的速度降低10%,而不是10mph),则可能会再次使用当前值:speed.current *= 0.9。再一次,这两个都可以通过以下offset版本实现:


speed.offset -= 10 // reduce by 10

speed.offset = speed.current * 0.9 - speed.base // reduce by 10%

正如我们在此处看到的那样,使用current相对缓慢可以使代码更易于阅读,并且大多数人会speed.current -= 50比看到更明显speed.offset -= 50。current在进行相对缓慢的操作时,它的使用速度也更快,因为计算出的东西更少。


因此,您可能经常需要两者,而且两者都不比另一个优越。我仍然会说和Crocker所说的一样,与一起使用current,可能对每个人都更容易理解,并且在进行相对减慢时会更清洁。


查看完整回答
反对 回复 2021-03-26
?
BIG阳

TA贡献1859条经验 获得超6个赞

我更喜欢第一个变体,其中baseoffset是实际值,current是计算出的有效值。但是,我不会添加设置器,因为该设置器应设置基本值还是偏移量是不确定的。请将有效值保留为只读。

另外,我至少会考虑将修饰符做成一个列表,这样可以更容易实现和调试。考虑增加速度的运动鞋,给+50。然后,喝一点药水,给予+ 10%。然后您再次脱下运动鞋,最后药水用完了。如果您使用此方法使此代码正确,那么它将在修改属性的位置将所有逻辑都包含在属性的外部。这只是我的直觉,您必须自己做出决定,因为只有您知道真正的代码及其应采取的措施。


查看完整回答
反对 回复 2021-03-26
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信