[英]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__
每個名稱”; 如果不是,則表示“每個不以_
開頭的名稱”。 但是足夠接近我們的目的。
像這樣設置__init__.py
:
from .module1 import Class11, Class12
from .module2 import Class21, function21
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.