我有一个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__
在运行时正确动态覆盖?
注意:我也试过这个答案无济于事。