假设我有两个不同的模块,它们具有统一(相同)的接口.文件列表如下:
root/ logic.py sns_api/ __init__.py facebook/ pyfacebook.py __init__.py myspace/ pymyspace.py __init__.py
并且pyfacebook.py和pymyspace.py具有相同的接口,这意味着:
# in pyfacebook.py class Facebook: def __init__(self, a, b): # do the init def method1(self, a, b, ...): # do the logic # in pymyspace.py class Myspace: def __init__(self, a, b): # do the init def method1(self, a, b, ...): # do the logic
现在我有一个问题.我想在logic.py中执行逻辑而不复制代码,所以我想知道如何设置一个标志来显示我使用的模块,python将自动加载正确的代码,这意味着:
# in logic.py PLATFORM = "facebook" # import the right modules in, complete the logic with the current platform # create the right instance and invoke the right methods
然后我改变PLATFORM ='myspace',逻辑将自动运行.
那我该怎么做呢?
我想知道使用动态导入是否有效,或者eval原始python代码,但似乎不是一个好的解决方案.或者,如果我可以制作一个统一的包装
sns_api/__init__.py
有人可以帮忙吗?
只有两个我会做
if platform == 'facebook': from pyfacebook import FaceBook as Platform elif platform == 'myspace': from pymyspace import Myspace as Platform else: raise RuntimeError, "not a valid platform"
并Platform
在其余代码中使用.它在库中就像这样完成,参见os
模块.
你可以使用动态导入,但你可能不需要这样做.name =
__import__
('module')