我有一个Attribute
类,它可以表示不同的属性,如speed
或armor
。Attribute
具有base
、offset
和current
值。
这是最简单的解释使用的例子,我将使用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)
另一种表示方法是使用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
它们的工作方式完全相同,有没有理由用一个来代替另一个?你知道吗
正如@Lee Daniel Crocker在注释中提到的,这完全取决于您调整得更多的操作。 你改变
current
的频率比你改变offset
的频率高吗? 在Python中没有首选的方法,但是在您的程序中可能有一种。你知道吗根据你的例子,你似乎在创造一个人们与他人互动的游戏。 你提到了
armor
,speed
,玩家,以及被减速咒语击中。 当你的玩家被咒语拖慢时,你不想把他的speed
设成什么,你想把它缩小。 这是很容易做到的抵消,这正是它的用途。 但是,这也可以用current来完成,而且这两个代码是完全相同的,即使含义不同:speed.current -= 10
。你知道吗如果你想做一个相对缓慢的动作(比如说,让他慢10%而不是10英里/小时),你可能会再次使用当前值:
speed.current *= 0.9
。 同样,这两个都可以通过offset
版本实现:正如我们在这里看到的,使用
current
使代码在使用相对减速时更易于阅读,大多数人会发现speed.current -= 50
比speed.offset -= 50
更明显。在进行相对减速时使用current
也更快,因为计算的内容更少。你知道吗所以,你可能经常需要两者,而且两者都不优于另一个。 我仍然会说和克罗克说的一样,用
current
,这对每个人来说可能更容易理解,而且在做相对减速时更干净。你知道吗相关问题 更多 >
编程相关推荐