我有一个Attribute类,它可以表示不同的属性,例如speedor 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)
现在表示它的另一种方法是使用baseandcurrent和 haveoffset作为属性:
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
它们都以完全相同的方式工作,是否有理由使用一个而不是另一个?