当前位置:  开发笔记 > 编程语言 > 正文

加载不同的模块而不更改逻辑文件

如何解决《加载不同的模块而不更改逻辑文件》经验,为你挑选了1个好方法。

假设我有两个不同的模块,它们具有统一(相同)的接口.文件列表如下:

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

有人可以帮忙吗?



1> Jochen Ritze..:

只有两个我会做

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')

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有