一、Python文档对包(Package)的定义:
package – 包
一种可包含子模块或递归地包含子包的 Python module。从技术上说,包是带有 __ path__ 属性的 Python 模块。
而在python 3.x之前,文件夹目录中含有__init__.py即为包,包是对一系列py模块的集合或者说打包,想要调用包中的模块目录中必须要有__init__.py文件。
但注意在python3.x之后去除了这一要求,意味着即使目录中没有__init__.py,也会被识别为包从而调用包中的模块。
二、 那现在的__init__.py有啥用呢?
我们先来看看官方文档对包内__init__文件的解释:
常规包通常以一个包含 __ init__.py 文件的目录形式实现。 当一个常规包被导入时,这个 __ init__.py 文件会隐式地被执行,它所定义的对象会被绑定到该包命名空间中的名称。__ init__.py 文件可以包含与任何其他模块中所包含的 Python 代码相似的代码,Python 将在模块被导入时为其添加额外的属性。
这里给出它一个用处:在包内的__init__.py文件中导入该包一些模块内常用的常量、类、对象或者函数,这样在导入包时可直接导入这些在__init__.py内初始化的变量。
Test目录下有一个 包 PackageA 和 main.py,A包内有ModuleA模块:
模块A内有两个变量LocalValue1、LocalValue2:
在包的__init__.py中导入其中一个:
看看效果,在主函数中导入Value1和Value2的不同方式: