模块
包
1. **定义包**:`__init__.py` 文件的存在标志着一个目录应该被Python视为一个包。
1. **初始化代码**:可以在 `__init__.py` 中编写代码来初始化包,比如导入其他模块,设置全局变量等。
1. **自动导入**:当导入一个包时,Python 会自动执行 `__init__.py` 文件中的代码。
包的子模块搜索:当一个包被导入时,Python会自动为该包设置__path__属性。
这个属性是一个列表,包含了包中所有子模块的搜索路径。这使得可以从包中导入其他子模块。
扩展包功能:开发人员可以通过修改__path__属性来添加自定义的搜索路径
,从而扩展包的功能。例如,在包的__init__.py文件中可以动态地添加路径。
动态加载模块:在一些情况下,__path__可以用于动态地加载模块,特别是在插件系统或第三方库集成中。
1. **控制导入行为**:当使用 `from module import *` 导入时,
只有列在 `__all__` 列表中的名字才会被导入到当前命名空间中。
1. **文档化**:通过定义 `__all__`,可以清晰地表明哪些是模块的公共接口,哪些是供外部使用的。
1. **保护私有成员**:未在 `__all__` 中列出的名字默认不会被 `from module import *` 导入,
这有助于保护那些被认为是内部实现细节的成员。