[英]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.