【发布时间】:2016-08-15 05:29:36
【问题描述】:
有两个版本的存储。根据版本,我需要选择合适的接口模块才能得到结果。
文件结构如下:
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__仅使用导入 分包? - 如何在 Python 中正确实现 Factory?
【问题讨论】:
-
您为实际尝试解决问题做了哪些工作,哪些工作没有解决?
-
@kindall:其实问题是storage_version不知道怎么导入接口。正常的动态导入在这里是行不通的,因为 storage_version 是在 provider 模块导入之后定义的。
-
拥有 Provider1 和 Provider2 类并使用工厂或类似的东西来获取相应的提供程序实例在你知道 storage_version 之后怎么样?我看到不需要动力。
-
@JL Peyret:这可能是解决方案。因为提供者的代码几乎相同,所以我想要一个类,但可能它们可以从一个公共基类继承。
标签: python python-2.7 python-import python-module