在 Python 包中,__init__.py 文件用于将一个目录标记为 Python 包,并可以包含初始化代码。以下是 __init__.py 文件的常见用途和示例代码:
1. 包的初始化
__init__.py 文件的存在告诉 Python 解释器该目录应该被视为一个包。即使文件为空,它也起到了这个作用。
2. 模块导入控制
可以在 __init__.py 中定义 __all__ 变量,指定哪些模块会被 from package import * 导入。
示例:
# app/settings/__init__.py
__all__ = ['Settings', 'APP_SETTINGS', 'TORTOISE_ORM']
from .config import Settings
APP_SETTINGS = Settings()
TORTOISE_ORM = APP_SETTINGS.TORTOISE_ORM
3. 包内模块的导入
在 __init__.py 中导入包内的模块,使得外部可以直接通过包名访问这些模块。
示例:
# app/settings/__init__.py
from .config import Settings # 导入子模块
from .database import TORTOISE_ORM_CONFIG # 导入其他配置
# 初始化设置
APP_SETTINGS = Settings()
TORTOISE_ORM = APP_SETTINGS.TORTOISE_ORM
4. 设置全局变量或配置
可以在 __init__.py 中定义全局变量或配置,供包内的其他模块使用。
示例:
# app/settings/__init__.py
from .config import Settings
# 初始化设置实例
APP_SETTINGS = Settings()
# 配置 Tortoise ORM
TORTOISE_ORM = APP_SETTINGS.TORTOISE_ORM
5. 简化外部调用
通过在 __init__.py 中暴露核心功能,外部代码可以更方便地使用包的功能。
示例:
# app/settings/__init__.py
from .config import Settings
from .utils import get_database_url
# 初始化设置
settings = Settings()
# 暴露方法和变量
__all__ = ['settings', 'get_database_url']
外部使用:
from app.settings import settings, get_database_url
6. 动态初始化
根据环境变量或其他条件动态初始化包。
示例:
# app/settings/__init__.py
import os
from .config import DevelopmentSettings, ProductionSettings
# 根据环境变量选择配置
if os.getenv("ENV") == "production":
app_settings = ProductionSettings()
else:
app_settings = DevelopmentSettings()
# 暴露设置
__all__ = ['app_settings']
总结
__init__.py 的主要作用是:
-
将目录标记为 Python 包。
-
控制模块的导入和暴露。
-
初始化包内的配置和资源。
-
提供全局变量或工具函数。
通过合理设计 __init__.py,可以让包的结构更清晰,使用更方便。

被折叠的 条评论
为什么被折叠?



