0

我有一个class Cache(object):实现缓存方案的简单类(即新类型)。缓存中的查找通过__getitem__. 现在我想实现一种方法来完全禁用缓存(每次都有效地生成内容)并设置一个实例变量self.disabled来表示该条件。

现在的想法是,__init__要做:

if self.disabled:
    self.__dict__['__getitem__'] = self.disabled___getitem__

唉,它没有生效。当我使用替代形式时也会发生同样的情况:

if self.disabled:
    self.__getitem__ = self.disabled___getitem__

如何检查它是否有效?基本上默认版本的__getitem__有这样一行:

if self.disabled:
    raise RuntimeError("This mustn't get called when the cache is disabled!")

应该使用的没有那条线。

当我更改为时class Cache(object):class Cache:我最终得到了空物品,但也不例外。

如何__getitem__在运行时正确动态覆盖?

注意:我也试过这个答案无济于事。

4

1 回答 1

0

这是错误的方法;如果出现以下情况,则应改为__getitem__更改其行为self.disabled

class Cache(object):

    def __getitem__(self, item):
        if not self.disabled:
            if ((ITEM_IS_CACHED)):
                return ((VALUE))
        # Cache miss, or cache disabled
        ((CALCULATE_ITEM))
        return ((VALUE))
于 2013-07-08T02:20:59.397 回答