LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

为什么python包里面总有__init__.py?

admin
2025年10月28日 8:38 本文热度 53

在Python开发中,__init__.py文件堪称 “包的灵魂”,但很多开发者只知其存在,不懂其深意。结合 B 站热门教学视频的核心内容,今天我们不仅拆解它的核心作用,更完整还原视频中的代码案例和实操讲解,带你从零掌握这个关键文件的用法。



一、为什么包里面总有__init__.py?

为什么几乎所有 Python包目录下,都藏着一个__init__.py?答案很明确 —— 它是Python 包的 “身份凭证”

Python解释器默认不会把普通文件夹当作 “包” 对待,哪怕文件夹里有.py文件,也只能视为普通目录。只有当目录中存在__init__.py时,解释器才会认定这是一个合法的 Python包,允许通过import语句导入其中的模块。

用一个简单对比验证了这一点:

  • __init__.py的文件夹:尝试import 文件夹.模块会直接报错 “没有该模块”;
  • 添加空的__init__.py后:导入语句正常执行,证明包的身份已被识别。

二、init.py 的3大实用功能(附代码详解)


我们通过具体代码案例,拆解了__init__.py除 “身份标识” 外的核心实用功能,每一步都有清晰的代码演示和效果说明:

1. 控制 “批量导入” 的可见性(__all__变量用法)

新手常困惑 “为什么用from 包 import *时,有些模块导不出来?”,答案就在__init__.py__all__变量中。

代码案例:假设我们有如下包结构:

mypackage/    __init__.py    module1.py  # 含函数 func1()    module2.py  # 含函数 func2()    module3.py  # 含函数 func3()
__init__.py中添加:
# __init__.py中的代码__all__ = ['module1''module2']  # 明确指定可被“*”导入的模块

效果

  • 执行from mypackage import *后,只能导入module1module2module3不会被导入;
  • 作用:避免无关模块暴露,减少命名冲突,让代码更可控。

2. 初始化包级资源(全局变量 + 统一配置)

__init__.py会在包被导入时自动执行,用它来演示 “包级全局变量和初始化逻辑” 的定义。

代码案例:在__init__.py中定义:

# __init__.py中的代码# 1. 定义包级全局变量__version__ = "1.0.0"__author__ = "Hucci"# 2. 定义包内公共函数(所有子模块可调用)def package_common_func():    print("这是包的公共函数,所有子模块均可使用")# 3. 初始化公共配置(如数据库连接)print("包正在初始化...加载公共配置")

演示效果

  • 当执行import mypackage时,会自动打印 “包正在初始化... 加载公共配置”,完成全局变量和函数的初始化;
  • 外部可直接通过mypackage.__version__获取版本号,子模块内也能调用package_common_func()

3. 简化导入路径(避免 “嵌套层级地狱”)

“多层嵌套包导入太繁琐”,而__init__.py能完美解决这个问题,通过提前导入子模块,缩短外部调用路径。

代码案例:原有包结构(嵌套层级深):

mypackage/    __init__.py    subpackage/        __init__.py        module.py  # 含类 MyClass
未配置时,外部导入需写:
from mypackage.subpackage.module import MyClass
mypackage/__init__.py中添加:
# mypackage/__init__.py中的代码from .subpackage.module import MyClass  # 提前导入子模块的类

演示效果

  • 外部可直接简化导入:from mypackage import MyClass
  • 核心价值:减少代码冗余,让导入逻辑更清晰,尤其适合复杂包结构。

三、误区:Python 3.3 + 真的不需要__init__.py 了?


核心观点

  • Python3.3 引入 “命名空间包”,允许无__init__.py的目录作为 “简单命名空间包”,但仅适用于无需配置的极简场景;
  • 只要涉及 “控制导入”“初始化配置”“定义公共资源”,__init__.py依然是必需的;
  • 实战建议:为了代码规范性和兼容性,自定义包时建议始终创建__init__.py

四、总结:init.py 的核心价值


__init__.py是Python包的 “管家”—— 既负责证明包的身份,又管理包的导入规则、初始化资源、简化调用路径,是编写规范Python项目的基础。

掌握它的用法,能让你的代码结构更清晰、维护更高效,尤其在大型项目开发中,更是不可或缺的关键文件。


阅读原文:


该文章在 2025/10/30 11:07:35 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved