适当修改映射对象的__setattr__方法



所以,我有一个web应用程序,其中有一个特定的数据库对象与属性,我想在redis商店缓存。相对简单的手动操作,如下所示:

db_object.update({<attribute>: <value>})
redis.set(db_object.id, <value>)

这里的问题是,它是一个属性,在整个代码库的许多地方被改变。这并不意味着这种方法不能工作,它只是意味着它使代码非常重复。我宁愿只有一个缓存的包装器,我可以在需要时直接访问它。这意味着,任何时候我改变我感兴趣的特定属性,我想更新我的redis存储,理论上像这样:

def __setattr__(self, name, value):
    self.__dict__[name] = value
    if name == <attribute>:
        redis.set(self.id, value)

可以解决我所有的问题。唯一的问题是,正如这里详述的,我不能直接修改映射对象中的__dict__。我怎样才能达到同样的效果?

在另一个问题上找到了解决这个问题的好方法。可以直接调用super方法而不直接修改__dict__

下面的

方法达到了预期的效果:

def __setattr__(self, name, value):
    if name == <attribute>:
        redis.set(self.id, value)
    super(Dataset, self).__setattr__(name, value)

相关内容

  • 没有找到相关文章

最新更新