基数和当前vs基数和抵消?

2024-04-18 21:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Attribute类,它可以表示不同的属性,如speedarmorAttribute具有baseoffsetcurrent值。 这是最简单的解释使用的例子,我将使用speed作为一个例子。你知道吗

speed = Attribute()。 现在速度有一个base值,它只是我们的玩家移动的速度。 当我为运动员装备更好的跑鞋时,他会得到额外速度的f.e.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)

另一种表示方法是使用basecurrent并将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

它们的工作方式完全相同,有没有理由用一个来代替另一个?你知道吗


Tags: selfbase属性objectinitvaluedefattribute
1条回答
网友
1楼 · 发布于 2024-04-18 21:16:31

正如@Lee Daniel Crocker在注释中提到的,这完全取决于您调整得更多的操作。 你改变current的频率比你改变offset的频率高吗? 在Python中没有首选的方法,但是在您的程序中可能有一种。你知道吗

根据你的例子,你似乎在创造一个人们与他人互动的游戏。 你提到了armorspeed,玩家,以及被减速咒语击中。 当你的玩家被咒语拖慢时,你不想把他的speed设成什么,你想把它缩小。 这是很容易做到的抵消,这正是它的用途。 但是,这也可以用current来完成,而且这两个代码是完全相同的,即使含义不同:speed.current -= 10。你知道吗

如果你想做一个相对缓慢的动作(比如说,让他慢10%而不是10英里/小时),你可能会再次使用当前值: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 -= 50speed.offset -= 50更明显。在进行相对减速时使用current也更快,因为计算的内容更少。你知道吗

所以,你可能经常需要两者,而且两者都不优于另一个。 我仍然会说和克罗克说的一样,用current,这对每个人来说可能更容易理解,而且在做相对减速时更干净。你知道吗

相关问题 更多 >