[英]Initialize module python
我有一個模塊 ,其中包裝了一個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()
import second_hand_songs_wrapper as s
s.set_cache_strategy(s.LFU)
l1 = s.ShsLabel.get_from_resource_id(123)
l2 = s.ShsLabel.get_from_resource_id(123,use_cache=Fale)
編輯:我可能只打算有兩種策略,一種有/沒有緩存。
我想到的其他可能的替代初始化方案包括使用環境變量,將用戶代碼中的_cache手動初始化為None / LFU()以及在各處使用顯式緩存(可能默認為具有緩存)。
請注意,我沒有在類的實例上設置緩存的原因是,我當前使用的是永不實例化的類(將類函數+類狀態作為單例使用)來抽象下載json數據以及一些方便/方法來下載某些網址。 我可以實例化downloader類,但隨后必須將實例顯式傳遞給每個函數,或將另一個全局變量用於該類的便捷版本。 downloader類還跟蹤請求數(網站每分鍾/小時有限制),因此擁有多個downloader對象會造成更多麻煩。
設置默認值沒有什么問題,即使該默認值為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()
。 確實,就您的策略而言,實際上,您應該使所有策略都從某個基本策略繼承而來,只是創建一個no_cache策略類,該類從該策略繼承而來,並為標准化緩存接口添加所有方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.