我有一套相當簡單的功能,我有多個實現,例如可以由Redis,MongoDB或PostgreSQL支持的數據存儲。我應該如何構建/編寫我的代碼,以便希望使用這些實現之一的代碼只需要該實現的依賴關係,例如,如果他們使用的是Redis後端,則不需要安裝psycopg2
。如何僅支付您在Python中使用的實現的依賴性懲罰?
下面是一個例子。假設以下模塊,example.py
。
class RedisExample(object):
try:
import redis
except ImportError:
print("You need to install redis-py.")
def __init__(self):
super(RedisExample, self).__init__()
class UnsatisfiedExample(object):
try:
import flibbertigibbet
except ImportError:
print("You need to install flibbertigibbet-py")
def __init__(self):
super(UnsatisfiedExample, self).__init__()
這裏是我的Python shell的體驗:
>>> import example
You need to install flibbertigibbet-py
或者:
>>> from example import RedisExample
You need to install flibbertigibbet-py
我真的寧願我沒有,直到我試圖實例化一個UnsatisfiedExample
得到這個錯誤。有沒有什麼常見的方法來解決這個問題?我曾考慮過讓每個後端都有自己的模塊並使用工廠功能來製作example
,但我想確保我不會錯過更好的東西。
謝謝。
有了這樣一個驚人的代表你的整個問題是在標題...? –
這可能有助於集中標題並在正文中提供詳細信息。細節幫助,一些幾乎可用的代碼來顯示你希望發生的事情通常是有幫助的。 –
對不起 - 我有一個新生兒,所以專注的能力在這裏是一分鐘,接下來就是了。我會嘗試修改。 –