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 模块
)
相关推荐
ellenwan202610 小时前
近期AI协作量化实现,先补规则清晰度和流程完整性
人工智能·python
卷无止境10 小时前
Python 类型注解与运行时反射:从原理到工程实践
后端·python
酷可达拉斯10 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
W6580341910 小时前
2026年AI编程工具实测横评:Claude Code v2.1、Cursor 3.0、Trae SOLO、Copilot、Windsurf 谁更好用?
python·copilot·ai编程
snow@li11 小时前
技术栈对应:Vue (前端) + SpringBoot (Java 后端) =》 Python 全场景配套
python
2501_9095091011 小时前
DAY 28
开发语言·python
码云骑士11 小时前
71-Agent记忆系统-短期记忆-长期记忆-向量知识库三层架构
python·架构
卷无止境11 小时前
Python 的 exec 与 eval :动态代码执行的能力、风险与工程实践
后端·python
user-猴子11 小时前
从零构建 2048 游戏,解析“Python-Use”范式的完整闭环
开发语言·python·游戏
郝学胜_神的一滴11 小时前
Python 高级编程 025:二分利器bisect模块:优雅维系有序序列,极致优化检索性能
python·pycharm