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。这可能吗?它背后的动机是允许在小脚本或交互模式下快速、轻量地使用。众所周知,对于较长的脚本,人们不会使用 import all 并正确遍历包结构。
编辑:我可以在 pkg 的 __init__.py
中导入 Class11、Class12 和 function21,但是这样,当我执行常规 import pkg
时,我仍然可以通过 pkg.Class11
而不是正确的 pkg.module1.Class11
。如果我不做 import *
.
,最好我希望 pkg.module1.Class11
成为唯一的方法
当然可以。 *
表示 "everything".* 如果您不想要所有内容,而是想要特定的名称列表,只需使用这些名称:
from pkg import Class11, Class21, function21
当然,这假定 pkg
已经从其子模块中导入了这些名称。但如果不是这样,您的 *
导入也不会起作用。
如果那不是真的,但你想知道如何让它成为真的,你只需在 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
* 嗯,不完全是 "everything"。如果有__all__
,则表示"every name in __all__
";如果不是,则表示 "every name that doesn't start with _
"。但是对于我们的目的来说足够接近了。
是的,你可以。看看 Flask 做了什么 here:
基本上,您可以像这样在 __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
我有一个包设置了树状结构,如
pkg\
__init__.py
module1.py
Class11
Class12
module2.py
Class21
function21
我希望特定的 类 和函数位于全局命名空间中,这样当我使用
启动我的脚本时from pkg import *
我将能够直接使用Class11、Class12 和function21。这可能吗?它背后的动机是允许在小脚本或交互模式下快速、轻量地使用。众所周知,对于较长的脚本,人们不会使用 import all 并正确遍历包结构。
编辑:我可以在 pkg 的 __init__.py
中导入 Class11、Class12 和 function21,但是这样,当我执行常规 import pkg
时,我仍然可以通过 pkg.Class11
而不是正确的 pkg.module1.Class11
。如果我不做 import *
.
pkg.module1.Class11
成为唯一的方法
当然可以。 *
表示 "everything".* 如果您不想要所有内容,而是想要特定的名称列表,只需使用这些名称:
from pkg import Class11, Class21, function21
当然,这假定 pkg
已经从其子模块中导入了这些名称。但如果不是这样,您的 *
导入也不会起作用。
如果那不是真的,但你想知道如何让它成为真的,你只需在 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
* 嗯,不完全是 "everything"。如果有__all__
,则表示"every name in __all__
";如果不是,则表示 "every name that doesn't start with _
"。但是对于我们的目的来说足够接近了。
是的,你可以。看看 Flask 做了什么 here:
基本上,您可以像这样在 __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