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