假设我有两个不同的模块,它们具有统一(相同)的接口(interface)。文件列表如下:
root/
logic.py
sns_api/
__init__.py
facebook/
pyfacebook.py
__init__.py
myspace/
pymyspace.py
__init__.py
并且 pyfacebook.py 和 pymyspace.py 具有相同的接口(interface),这意味着:
# 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',逻辑将自动运行。
那么我该怎么做呢?
我想知道使用动态导入是否有效,或者评估原始 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')
,但您可能不需要这个。
关于python - 加载不同的模块而不改变逻辑文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606960/