../

Table of contents

__init__.py 在 Python 包中的作用

1. 基本功能

2. 简单示例

一个简单的包结构:

my_package/
├── __init__.py
├── module1.py
└── module2.py

简单的__init__.py:

# 导入模块
from .module1 import function1
from .module2 import function2

# 定义包的公共接口
__all__ = ['function1', 'function2']

3. 复杂包结构中的__init__.py

对于复杂的包结构,__init__.py可以用于组织子包和模块:

my_complex_package/
├── __init__.py
├── subpackage1/
│   ├── __init__.py
│   ├── module1.py
│   └── module2.py
└── subpackage2/
    ├── __init__.py
    ├── module3.py
    └── module4.py

复杂的__init__.py:

# 导入子包
from .subpackage1 import module1, module2
from .subpackage2 import module3, module4

# 定义包的公共接口
__all__ = ['module1', 'module2', 'module3', 'module4']

4. 高级用法

  1. 动态导入:

    • 可以在__init__.py中使用动态导入,根据条件导入模块。
    • 例如,根据Python版本导入不同的模块。
  2. 命名空间管理:

    • 使用__init__.py来管理包的命名空间,避免命名冲突。
    • 可以通过__init__.py来重命名导入的模块。
  3. 初始化逻辑:

    • 可以在__init__.py中编写初始化逻辑,比如设置全局变量、配置日志等。

示例:

import sys

# 动态导入
if sys.version_info[0] < 3:
    from .subpackage1 import module1 as mod1
else:
    from .subpackage2 import module3 as mod1

# 初始化逻辑
print("Initializing my_complex_package")

# 定义包的公共接口
__all__ = ['mod1']

5. 总结

/Python/