python的__init__.py

即使是空的 __init__.py,它依然有两个核心作用,对于你(特别是做工程化开发)非常重要。


1. 把它变成"常规包" (Regular Package)

如果你不加 __init__.py,Python 3 会把这个目录当作 Namespace Package(命名空间包)

  • Namespace Package 是个高级特性,允许一个包分布在硬盘的多个不同目录下(比如 plugin/ 文件夹一部分在 C 盘,一部分在 D 盘)。
  • 对于我们这种普通的项目,你需要的是 Regular Package 。加上 __init__.py,Python 扫描 import 时效率更高,而且行为更符合直觉。

2. 控制 from package import * 的行为 (重点)

这是 __init__.py 最实用的功能:对外暴露接口

假设你的目录结构是这样:

text 复制代码
strategies/
├── __init__.py
├── rsi_strategy.py   <-- 里面有个 class RSIStrategy
└── ma_strategy.py    <-- 里面有个 class MAStrategy

如果 __init__.py 是空的:

你想在 main.py 里用这两个策略,你得写得很长:

python 复制代码
from strategies.rsi_strategy import RSIStrategy
from strategies.ma_strategy import MAStrategy

(如果文件名很长,这会写得很烦)

如果你在 __init__.py 里写了东西:

你可以在 strategies/__init__.py 里写:

python 复制代码
# strategies/__init__.py
from .rsi_strategy import RSIStrategy
from .ma_strategy import MAStrategy

现在,你在 main.py 里就可以这样写了:

python 复制代码
# 变得非常简洁!
from strategies import RSIStrategy, MAStrategy

这就是所谓的 "提升命名空间"。你把深层文件里的类,提到了包的顶层,让使用者(也就是你自己)调用起来更爽。

总结

虽然 Python 3 不强制要求,但请务必保留 __init__.py,哪怕是空的。 因为它标志着:"这是一个完整的、独立的 Python 源代码包",这对于代码规范和 IDE 的智能提示都非常重要。

相关推荐
傻啦嘿哟4 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670794 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
2601_962077604 小时前
python Dejavu库快速识别音频指纹实例探究
python·音乐识别·dejavu库·音频指纹识别·实例探究
科技苑5 小时前
如何用Python编程实现一个简单的Web爬虫?
人工智能·python
dayDayupbetter5 小时前
Visual C++ 2010安装与使用高手秘籍
python
隐擎fox5 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
医疗信息化王工5 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
小玮看世界6 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
Java陈序员7 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
2601_962097367 小时前
1. 使用 C 或 C++ 扩展 Python
python·api·c·引用计数·扩展模块