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 模块
)
相关推荐
西红柿炒番茄312 分钟前
【Python】一个自动切换壁纸的python程序
开发语言·python
跨境数据猎手5 分钟前
B 站 item_search_video 接口开发,搭建生产级视频搜索服务
大数据·爬虫·python
EnCi Zheng10 分钟前
03ab-PyTorch安装教程 [特殊字符]
人工智能·pytorch·python
SmartBrain14 分钟前
从Prompt工程到Harness工程:AI Agent落地之路
人工智能·python·华为·aigc
X56618 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
ZhengEnCi9 小时前
03ab-PyTorch安装教程 📚
python
狐狐生风9 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
狐狐生风10 小时前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
老前端的功夫10 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
yaoxin52112310 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python