__all__ 未在包的 __init__.py 中定义时的结果?
result when __all__ is not defined in __init__.py of package?
我只是在学习和练习 python,在途中,我正在阅读有关 python 包以及如何在 Modules 导入其他模块或包的信息,我假设以下情况,
我有包,
Video/
__init__.py
formats/
__init__.py
mkv.py
mp4.py
length/
__init__.py
morethan20min.py
lessthan20min.py
没有
__init__.py
我还没有定义
__all__
如果我有一个导入语句会发生什么,
import Video.format.mkv
import Video.formats.*
由于我已经在第一个语句中导入了 mkv 模块,所以在执行第二个导入语句后究竟发生了什么,我在阅读提到的 link 后没有得到概念。
当你这样做时
from whatever_package import *
首先,如果包裹的 __init__.py
还没有 运行,它将是 运行。 (如果你已经完成了 import whatever_package.something_specific
,包裹的 __init__.py
将已经 运行。)
然后,如果 whatever_package.__init__
没有定义 __all__
列表,导入将获取 whatever_package
对象的所有 current 内容*。那将是 __init__.py
中定义的任何内容,以及任何已经由程序中执行的任何代码显式导入的子模块。例如,如果 whatever_package
的 __init__.py
为空,则您可以
import whatever_package.something_specific
from whatever_package import *
import whatever_package.other_thing
并且您的程序中不存在与 whatever_package
相关的其他导入语句,那么 import *
将选择 something_specific
,但不会选择 whatever_package
的任何其他子模块,比如other_thing
.
*不包括以下划线开头的任何内容,这是任何没有 __all__
列表的 import *
的标准,无论您是从包还是从普通模块导入。
我只是在学习和练习 python,在途中,我正在阅读有关 python 包以及如何在 Modules 导入其他模块或包的信息,我假设以下情况,
我有包,
Video/
__init__.py
formats/
__init__.py
mkv.py
mp4.py
length/
__init__.py
morethan20min.py
lessthan20min.py
没有
__init__.py
我还没有定义
__all__
如果我有一个导入语句会发生什么,
import Video.format.mkv
import Video.formats.*
由于我已经在第一个语句中导入了 mkv 模块,所以在执行第二个导入语句后究竟发生了什么,我在阅读提到的 link 后没有得到概念。
当你这样做时
from whatever_package import *
首先,如果包裹的 __init__.py
还没有 运行,它将是 运行。 (如果你已经完成了 import whatever_package.something_specific
,包裹的 __init__.py
将已经 运行。)
然后,如果 whatever_package.__init__
没有定义 __all__
列表,导入将获取 whatever_package
对象的所有 current 内容*。那将是 __init__.py
中定义的任何内容,以及任何已经由程序中执行的任何代码显式导入的子模块。例如,如果 whatever_package
的 __init__.py
为空,则您可以
import whatever_package.something_specific
from whatever_package import *
import whatever_package.other_thing
并且您的程序中不存在与 whatever_package
相关的其他导入语句,那么 import *
将选择 something_specific
,但不会选择 whatever_package
的任何其他子模块,比如other_thing
.
*不包括以下划线开头的任何内容,这是任何没有 __all__
列表的 import *
的标准,无论您是从包还是从普通模块导入。