[英]Creating Python Façade Package
我不确定如何描述这一点,但是有没有办法创建一个外观包来处理内部包的多个版本?
考虑:
Foo/
__init__.py
A/
Bar/
__init__.py
etc.
B/
Bar/
__init__.py
etc.
C/
Bar/
__init__.py
etc.
在包的__init__.py
我有 python 逻辑来附加 sys.path 以根据运行时配置指向 Bar 包之一。 这让我使用了两个 python 导入语句。
import Foo
import Bar
我可以将其简化为一个 import 语句并将 Foo 视为正确版本的 Bar 的外观吗? 我发现的唯一一个是基于这篇文章。 在 foo.py 的__init__.py
:
for attr in dir(bar):
globals()[attr] = getattr(bar, attr)
我建议不要修改system.path
因为这可能会对不相关的代码产生影响。
您可以通过使用sys.modules
来获得此行为。 导入模块时,它会在sys.modules
字典中注册。 您只需在导入时设置代理模块的条目即可完成此操作。
实现.py:
def method():
print "implemented method"
代理.py:
if __name__ != '__main__':
import sys
import implementation
sys.modules[__name__] = implementation
主要.py:
if __name__ == '__main__':
import proxy
proxy.method()
输出:
$ python main.py
implemented method
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.