下面是一个非常简单的代码,我试图实现一个非常基本的有序应用程序内缓存。我期望在每次services.cache
的通话中,我在整个应用生命周期中都能得到相同的id
。但是值不同。这背后的原因是什么?
我了解的是,self.__cache
应该重用它创建的第一个InAppCache
对象。我在这里想念什么?
from collections import OrderedDict
import sys
class InAppCache(OrderedDict):
MAX_MEMORY = 50 * 10 ** 6
def add(self, key, value):
self[key] = value
def remove(self, key):
return self.popitem(last=False)
def is_remove_needed(self):
return sys.getsizeof(self) > self.MAX_MEMORY
def reset(self):
self.clear()
class Services:
def __init__(self):
self.__cache = None
@property
def cache(self):
if not self.__cache:
self.__cache = InAppCache()
print(id(self.__cache))
return self.__cache
services = Services()
services.cache
services.cache
services.cache
services.cache
services.cache
services.cache
答案 0 :(得分:2)
ByteArrayEntity
是OrderedDict
的子类,如果为空,则视为 falsey 。因此,dict
测试始终为真,直到您将某些内容放入字典中。请改用if not self.__cache
。
答案 1 :(得分:0)
因为bool(ordered_dict)
是False
。请改用self.__cache is None
。