有两个版本的存储空间。根据版本,我需要选择合适的接口模块来获得结果。
文件结构如下所示:
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
,应导入storage
子包中列出的某个接口,具体取决于存储的版本。
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__
仅使用导入
子包?答案 0 :(得分:0)
假设interface_v1
和interface_v2
bith实现了一个类StorageClass
我想这样的事情:
import storage.interface_v1
import storage.interface_v2
class Provider(object):
def __init__(self , version):
if version == 1:
self.storage = storage.interface_v1.StorageClass
else:
self.storage = storage.interface_v2.StorageClass
这将是最佳解决方案 - 但https://docs.python.org/2/library/functions.html#import应该提供一种基于名称导入模块的方法。