我有一个实现缓存方案的简单类(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__
?
注意:我也试过this answer无济于事。
答案 0 :(得分: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))