python __init__.py的意义与使用

1. 基本规则

情况1:__init__.py 中已导入

python

复制代码
# project/input/__init__.py
from .file_input import FileInput    # 在这里导入

# project/main.py
# ✅ 可以直接使用,不需要再写 from . import
from project.input import FileInput  # 简洁!

情况2:__init__.py 中未导入

python

复制代码
# project/input/__init__.py
# 空文件或未导入 FileInput

# project/main.py
# ❌ 这样会报错
from project.input import FileInput  # ImportError!

# ✅ 必须写完整路径
from project.input.file_input import FileInput

2. 完整示例对比

不好的设计(每个文件都要写完整导入)

python

复制代码
# project/input/__init__.py
# 空文件

# project/main.py
from project.input.file_input import FileInput
from project.input.cli_input import CLIInput
from project.input.api_input import APIInput

# project/processor/__init__.py  
# 空文件

# project/main.py(继续)
from project.processor.data_processor import DataProcessor
from project.processor.batch_processor import BatchProcessor

好的设计 (利用 __init__.py 简化)

python

复制代码
# project/input/__init__.py
from .file_input import FileInput
from .cli_input import CLIInput  
from .api_input import APIInput
__all__ = ['FileInput', 'CLIInput', 'APIInput']

# project/processor/__init__.py
from .data_processor import DataProcessor
from .batch_processor import BatchProcessor
__all__ = ['DataProcessor', 'BatchProcessor']

# project/__init__.py
from .input import FileInput, CLIInput, APIInput
from .processor import DataProcessor, BatchProcessor
__all__ = ['FileInput', 'CLIInput', 'APIInput', 
           'DataProcessor', 'BatchProcessor']

# project/main.py
# ✅ 非常简洁,一目了然
from project import (
    FileInput,      # 来自 input 模块
    CLIInput,       # 来自 input 模块  
    DataProcessor,  # 来自 processor 模块
    BatchProcessor  # 来自 processor 模块
)
相关推荐
superman超哥2 小时前
仓颉语言中网络套接字封装的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
陈天伟教授2 小时前
人工智能训练师认证教程(4)OpenCV 快速实践
人工智能·python·神经网络·opencv·机器学习·计算机视觉
RAY_01042 小时前
Python—数据可视化pyecharts
开发语言·python
Lvan的前端笔记2 小时前
python:用 dotenv 管理环境变量&生产环境怎么管理环境变量
网络·数据库·python
Java Fans2 小时前
用PyQt打造带动画、碰撞检测和键盘控制的小游戏
python·计算机外设·pyqt
深蓝海拓2 小时前
PySide6从0开始学习的笔记(十一) QSS 属性选择器
笔记·python·qt·学习·pyqt
AAA_bo12 小时前
liunx安装canda、python、nodejs、git,随后部署私有网页内容提取工具--JinaReader全攻略
linux·python·ubuntu·typescript·aigc·python3.11·jina
高洁013 小时前
DNN案例一步步构建深层神经网络(3)
python·深度学习·算法·机器学习·transformer
AI_56783 小时前
Jupyter交互式数据分析的效率革命
开发语言·python