我有一个Attribute
类,它可以表示不同的属性,例如speed
or 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
andcurrent
和 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
它们都以完全相同的方式工作,是否有理由使用一个而不是另一个?