簡體   English   中英

Python-從包中導入所有類時是否可以導入特定類

[英]Python - Can I import specific classes when importing all from a package

我有一個像樹形結構的軟件包

pkg\  
    __init__.py  
    module1.py  
        Class11  
        Class12  
    module2.py  
        Class21  
        function21  

我希望特定的類和函數位於全局名稱空間中,以便當我使用以下命令啟動腳本時

from pkg import *

我將能夠直接使用Class11,Class12和function21。 這可能嗎? 其背后的動機是允許在小型腳本或交互模式下快速輕松地使用。 隱含地知道,使用更長的腳本時,將不會使用全部導入並正確遍歷包結構。

編輯:我可以在pkg的__init__.py導入Class11,Class12和function21,但是通過這種方式,當我執行常規import pkg我仍然能夠通過pkg.Class11而不是適當的pkg.module1.Class11訪問Class11。 。 如果我不執行import *則最好讓pkg.module1.Class11是唯一方法。

當然。 *表示“一切”。 *如果您不想要所有內容,而是想要一個特定的名稱列表,請使用這些名稱:

from pkg import Class11, Class21, function21

當然,這假定pkg已經從其子模塊中導入了這些名稱。 但是,如果那不是真的,那么您的*導入也不起作用。

如果那不是真的,但是您想知道如何實現,那么只需在pkg/__init__.py執行類似的pkg/__init__.py

from .module1 import Class11, Class12
from .module2 import Class21, function21

或者可能:

from .module1 import __all__ as _all1
from .module2 import __all__ as _all2
from .module1 import *
from .module2 import *

__all__ = _all1 + _all2

*嗯,不是“一切”。 如果有__all__ ,則表示“ __all__每個名稱”; 如果不是,則表示“每個不以_開頭的名稱”。 但是足夠接近我們的目的。

是的你可以。 看看Flask在這里什么:

基本上,您可以像這樣在__init__.py導入函數和類:

from .app import Flask, Request, Response
from .config import Config

現在我們可以做:

from Flask import Flask ,Request

像這樣設置__init__.py

from .module1 import Class11, Class12
from .module2 import Class21, function21

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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