初始化模块python

2024-06-14 02:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个module,它包装了一个jsonapi,用于查询歌曲封面/混音数据,并限制了每小时/分钟的请求数。我希望保留json响应的可选缓存,而不必每次都强制用户调整cache/context参数。在python中初始化库/模块的好方法是什么?或者,您是否建议我只执行显式操作,并在每个最终请求json数据的调用中使用一个名为cache的参数?在

我在想

_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()

^{pr2}$

编辑: 我可能只打算有两个策略一个有/一个没有缓存。在

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

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


Tags: 数据实例方法函数no用户nonejson
1条回答
网友
1楼 · 发布于 2024-06-14 02:42:14

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

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

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

如果您想为可用策略提供一个方便的方法,只需包装caching_strategies.keys()。实际上,就您的策略而言,您可能应该让您的所有策略都继承自某个基本策略,并且只需创建一个nou cache strategy类,该类继承自该类并为您的标准化缓存接口创建所有方法存根。在

相关问题 更多 >