初始化模块python

初始化模块python,python,module,initialization,Python,Module,Initialization,我有一个json api,用于查询歌曲封面/混音数据,并限制每小时/分钟的请求数。我希望保留json响应的可选缓存,而不必每次都强制用户调整缓存/上下文参数。在python中初始化库/模块的好方法是什么?或者您会建议我只做显式的事情,在最终请求json数据的每个调用中使用一个名为参数的缓存吗 我在考虑做什么 _cache = None class LFU(object): ... NO_CACHE, LFU = "NO_CACHE", "LFU" def set_cache_stra

我有一个json api,用于查询歌曲封面/混音数据,并限制每小时/分钟的请求数。我希望保留json响应的可选缓存,而不必每次都强制用户调整缓存/上下文参数。在python中初始化库/模块的好方法是什么?或者您会建议我只做显式的事情,在最终请求json数据的每个调用中使用一个名为参数的缓存吗

我在考虑做什么

_cache = None

class LFU(object):
    ...

NO_CACHE, LFU = "NO_CACHE", "LFU"
def set_cache_strategy(strategy):
    if _cache == NO_CACHE:
        _cache = None
    else:
        _cache = LFU()

编辑: 我可能只打算采用两种策略,一种是带缓存的策略,另一种是不带缓存的策略

我可以想到的其他可能的替代初始化方案包括使用环境变量、手动将用户代码中的_cache初始化为None/LFU(),以及在任何地方使用显式缓存(可能默认为具有缓存)


请注意,我没有在类的实例上设置缓存的原因是,我目前使用从未实例化的类(使用类函数+类状态作为单例)来抽象下载json数据,并使用一些方便/方法来下载某些URL。我可以实例化downloader类,但是我必须将实例显式地传递给每个函数,或者使用另一个全局变量来实现该类的方便版本。downloader类还跟踪请求的数量(网站有每分钟/小时的限制),因此有多个downloader对象会带来更多麻烦。

设置默认值没有错,即使默认值是
无。但我要指出的是,拥有伪常量和条件(前提是您只使用这些值)是多余的。尝试:

caching_strategies = {'NO_CACHE' : lambda: None,
                      'LFU' : LFU}
_cache = caching_strategies['NO_CACHE']

def set_cache_strategy(strategy):
    _cache = caching_methods[strategy]()

如果您想为可用的策略提供一种方便的方法,只需包装
caching\u strategies.keys()
。实际上,就你的策略而言,你应该让你所有的策略都继承一些基本策略,只需创建一个no_cache strategy类,该类继承该类,并为标准化缓存接口存根所有方法。

为什么不在类的实例上而不是在模块上配置缓存策略?
caching_strategies = {'NO_CACHE' : lambda: None,
                      'LFU' : LFU}
_cache = caching_strategies['NO_CACHE']

def set_cache_strategy(strategy):
    _cache = caching_methods[strategy]()