簡體   English   中英

創建 Python Facade 包

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM