python中的一些特别性质文件
__init__.py
在Python工程里,当python检测到一个目录下存在__init__.py文件时,python就会把它当成一个模块(module)。Module跟C++的命名空间和Java的Package的概念很像,都是为了科学地组织化工程,管理命名空间。
主要作用:
- 标识目录为Python包
即使为空文件,目录中包含__init__.py也会被Python视为包(适用于Python 3.3之前的版本;3.3+支持”命名空间包”,无需此文件)。 - 初始化包级代码
当包被导入时,__init__.py中的代码会自动执行(例如:初始化变量、连接数据库)。 - 控制模块导入
- 批量导入:简化用户导入路径(例:
from mypackage import func而非from mypackage.module import func)。 - 定义
__all__:指定from package import *时导入哪些模块。 - 隐藏内部实现:可在
__init__.py中导入公共接口,隐藏内部模块。
- 批量导入:简化用户导入路径(例:
- 共享包级变量/函数
在__init__.py中定义变量、函数或类,可在包的多个模块间共享。
执行顺序示例
mypackage/
├── __init__.py # (1)
├── module1.py
└── subpackage/
├── __init__.py # (2)
└── module2.py # (4)当执行 import mypackage.subpackage.module2 时:
- 先执行外层包初始化:
mypackage/__init__.py(1) - 再执行子包初始化:
mypackage/subpackage/__init__.py(2) - 最后导入目标模块:
module2.py(4)

