为什么在下面的实现中创建多个对象?

时间:2019-09-11 10:35:05

标签: python python-3.x

下面是一个非常简单的代码,我试图实现一个非常基本的有序应用程序内缓存。我期望在每次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

2 个答案:

答案 0 :(得分:2)

ByteArrayEntityOrderedDict的子类,如果为空,则视为 falsey 。因此,dict测试始终为真,直到您将某些内容放入字典中。请改用if not self.__cache

答案 1 :(得分:0)

因为bool(ordered_dict)False。请改用self.__cache is None