检测变量何时变化的功能?

时间:2016-05-28 08:23:43

标签: python-3.x

我一直在为游戏制作一个小型库存系统(但不是问题),并制作了一个方法,该方法使用一个项目,然后将ItemStack的大小减一。因为堆栈大小的变化,我需要重新计算堆栈的权重和整体价值,我想知道是否有更好的方法来完成它而不是我做了什么?有没有办法检测stack_size何时更改并更新权重和值,可能使用装饰器或其他东西?非常感谢帮助。

def use_item_stack(self):
    self.stack_size -= 1
    self.stack_weight = self.item_weight * self.stack_size
    self.stack_value = self.item_value * self.stack_size

2 个答案:

答案 0 :(得分:0)

如果堆栈已更新,您所做的事情似乎足够合乎逻辑,因此需要在那时重新计算其总体重量。

然而,您可以拥有decorator并将其包含在所有"堆栈操作"中,因此每当他们更新堆栈时,包装器也会更新总重量:

def stack_sensitive(fn):
    def wrapper():
        ss = STACK_SIZE
        fn()
        if STACK_SIZE != ss: pass # recalculate
    return wrapper

答案 1 :(得分:0)

使用属性!

class Game(object):

    def __init__(self):
        self._stack_size = 5

    @property
    def stack_size(self):
        return self._stack_size

    @stack_size.setter
    def stack_size(self, val):
        self._stack_size = val
        #do some more updates of other things