2つのバージョンのストレージがあります。バージョンに基づいて、私は結果を得るために適切なインタフェースモジュールを選択する必要があります。Python 2.7:指定された変数に基づいて、インポートされたモジュールの動的モジュールのインポート
ファイル構造は次のようになりますストレージのバージョンに応じてstorage
サブパッケージに記載されているインターフェースのいずれかをインポートする必要があり
lib/
__init__.py
provider.py
connection.py
device.py
storage/
__init__.py
interface_v1.py # interface for storage of version 1
interface_v2.py # interface for storage of version 2
main.py
main.py
輸入provider.py
、。
main.py:
from lib.provider import Provider
from lib.connection import Connection
from lib.device import Device
connection = Connection.establish(Device)
storage_version = Device.get_storage_version()
massage = Provider.get_data(connection)
provider.pyはstorage_version
に基づいて、ストレージへのインタフェースをインポートし、いくつかの機能を提供実装する必要があり:
from storage import interface
class Provider(object):
def __init_(self):
self.storage = interface.Storage
def get_data(self, connection):
return self.storage.get_data()
def clear_storage(self, connection):
self.storage.clear_storage()
この例は完全ではないが、あるべきです問題の説明に十分です。
追加質問:
- はそれだけで サブパッケージのインポートを使用するように
storage.__init__
を使用することは可能ですか? - PythonでFactoryを適切に実装する方法は?
interface_v1
とinterface_v2
bithを想定すると、
実際に問題を解決するために何をしましたか、それについては何が問題になっていませんか? – kindall
@kindall:実際問題は、storage_versionのためにインターフェイスをインポートする方法がわかりません。 storage_versionは、プロバイダモジュールのインポート後に定義されるため、通常の動的インポートはここでは機能しません。 –
Provider1とProvider2のクラスを持つことについて、factoryを使用して、プロバイダのインスタンスを取得するにはどうしたら* storage_versionを知っていますか?私には必要なダイナミクスは必要ありません。 –