Python里你常常看到的 __init__.py 到底是个啥?

【Python】`__init__.py` 文件详解 本文针对Python开发者, 详细描述了__init__.py文件在参与包、模块、命名空间导入/重命名/初始化时的使用方法,以及其中代码的执行机制。 本文使用边执行案例,边分析,边给结论的方法,描述了__init__.py文件的四大作用。 模块搜索标记 初始化命名空间, 空间名称即为目录名 设置__all__ 通配符导入目标 为同一目录的其他模块定义命名空间。 阅读详情

作者 | 小帅b

来源 | 学习python的正确姿势

当你去看一些 Python 相关的项目时,常常会看到 __init__.py,当你使用某些编辑器创建 Python Package 的时候,它也会自动给你生成一个 __init__.py 文件。

这玩意有什么用呢?

我们知道, Python 中的包是可以包含多个 py 模块的,我们可以在不同的地方通过包名区分使用这些模块。

话不多说,咱们先来创建一下这样的目录:

我们在这里面创建了三个 Python 子包,里面都有 __init__ 和 module 的 py 文件。

我们分别在不同包下的 __init__ 中写一个 print 语句:

接着我们进入 Python ,分别来导入这些模块:

可以看到,当我们导入父模块中的子模块的时候,它会优先执行父模块中的 init ,接着会执行指定模块中的 init。

当然,只是导入父模块的时候只会执行父模块中的 init:

也就是说,当我们去 import 一个 Package 的时候,它会隐性的去执行 __init__.py , 而在 __init__.py 中定义的对象,会被绑定到当前的命名空间里面来。

比如有时候我们会这样去导入一个包下的所有模块,会这样操作:

但这个时候你会发现并没有将相关的子模块导入进来:

这时候你可能想到了,可以在父模块中的 __init__.py 做文章,先把它们导入进来不就行了:

这里的 __all__ 相当于导入 [] 里面定义的模块。

这次再导入:

可以看到,所有子模块就都一并导入进来了。

当然,你也可以在 __init__.py 做一些初始化的操作,比如数据库 session 的创建:

其实在 Python3.2 版本之前,定义的 Package 下面一定要有 __init__.py 文件,这样 Python 才知道它是一个 Package,才可以寻找到相关模块的路径从而被 import。

而在 Python3.2 之后的版本就不需要再额外的去专门创建一个 __init__.py 来告诉 Python 它是一个 Package 了,因为现在创建的包叫 Namespace package, Python 可以自动搜寻 Package 路径,哪怕你的父包路径发生了改变,你在下次导入的时候, Python 还是会自动重新搜索包路径。

我们把刚刚定义的 __init__ 都给删掉试试:

接着我们在 Python3.8 版本导入看看:

可以看到,尽管我们在 package 中没有定义 __init__.py,依然可以导入使用。

以同样的形式,我们在 Python2 中导入看看:

可以看到,它被整懵逼了...

综上,__init__.py 会在 import 的时候被执行,而空的 __init__.py 在 Python 新版本中已经不需要你额外去定义了,因为就算你不定义 init, Python 也知道你导入的包路径,但是如果你想要做一些初始化操作,或者像我们刚刚说的预先导入相关的模块,那么定义 __init__.py 还是很有必要的哟。

希望对你有帮助。

近期八大热门:

发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!
盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密
用Python一键生成炫酷九宫格图片,火了朋友圈
菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
Github获8300星!用Python开发的一个命令行的网易云音乐
一道Python面试题,硬是没憋出来,最后憋出一身汗!卧槽!Pdf转Word用Python轻松搞定!教你6招,不错的Python代码技巧!
菜鸟编程大本营,现已正式上线!
接下来我们将会在该公众号上,为大家分享优质编程语言里趣味的干货,通俗易懂的实战案例,经验分享,让菜鸟也爱上编程。


长按 2秒,输入:【书单】

获取Python精选书籍

点击阅读原文,直达菜鸟B站视频干货!

相关推荐

Windows 11下用Ollama一键部署DeepSeek-R1大模型(附8B/14B版本选择建议)

本文详细介绍了在Windows 11环境下使用Ollama工具一键部署DeepSeek-R1大模型的完整指南,包括8B和14B版本的选择建议。通过硬件评估、安装配置、性能优化等步骤,帮助开发者高效实现本地部署,提升AI应用体验。

weixin_29079643的博客 276

Python 模块下 __init__.py 文件

综上所述,文件在 Python 包中具有初始化包、控制包的导入行为和提供包级别功能的作用。我们可以根据需要在文件中编写代码来满足这些需求,并更好地组织和管理你的包。

Python栈 1万+

增程式永磁电机发电系统电压环二自由度控制器设计

本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高

weixin_44553616的博客 898

Python __init__.py

Python __init__.py 作用详解尼古拉苏关注12018.06.10 12:57:34字数 745阅读 45,278转载于:https://www.cnblogs.com/tp1226/p/8453854.html __init__.py该文件的作用就是相当于把自身整个文件夹当作一个包来管理,每当有外部import的时候,就会自动执行里面的函数。 1. 标识该目录是一个python的模块包(module package) 如果你是使用python的相关IDE来进行开发,那么如果目录中存在该文件,

qq_15821487的博客 6196

springboot + netty 实现多客户端登录 超出设备 并下线

本文档旨在详细描述多平台登录控制的需求和实现方案。当前系统仅支持单设备登录,需扩展为支持多设备同时在线,并提供多种登录策略。文档详细列出四种策略:单平台登录、双平台登录、三平台登录和多平台同时在线,每种策略的具体限制和支持平台。技术实现方案包括数据结构设计、NettyUtils 工具类方法、WebSocketHandler 修改,以及相应的测试方案

Likefr 1880

python 中心线提取_二值分析 | OpenCV + skimage如何提取中心线

点击上方蓝字关注我们微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识问题前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像:怎么得到白色Blob中心线,他希望的效果如下:显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本质上这个问题是如何提取二值对象的骨架,提取骨架的方法在OpenCV的扩展模块中,另外skimage包也支持图像的骨架提取。这里就...

weixin_42204453的博客 4290

Python中__init__.py文件的作用详解

init.py 文件 init.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。 # package # __init__.py import re import urllib import sys imp

wu_zhiyuan的博客 1万+

51单片机矩阵键盘——LCD1602显示

矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

YLG_lin的博客 9854

python模块 init py_Python里你常常看到的 __init__.py 到底是个啥?

原标题:Python里你常常看到的 __init__.py 到底是个啥? 作者 | 小帅b来源 | 学习python的正确姿势当你去看一些 Python 相关的项目时, 常常会看到 __init__.py,当你使用某些编辑器创建 Python Package 的时候,它也会自动给你生成一个 __init__.py 文件。 这玩意有什么用呢?我们知道, Python 中的包是可以包含多个 py 模块...

weixin_39923945的博客 176

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 493

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文详细分析了Xilinx 7系列ZYNQ芯片在Vitis开发环境中无法识别ARM DAP的常见问题及解决方案。从硬件设计检查(电源系统、时钟电路)、JTAG连接诊断到软件环境排查,提供了全面的调试指南。特别针对ARM DAP初始化失败的情况,给出了实用的排查步骤和预防措施,帮助开发者快速定位和解决类似问题。

weixin_33737134的博客 515

Python package里的__init__.py的简析和用法说明

Python package里的__init__.py的简析和用法说明

莫莫先生的博客 1万+

Claude Code 新手安装指南,手把手教你怎么安装使用

如果你是企业内网用户,或者需要自定义 API 端点,那可以用手动配置 API Key 的方式。

篮球界最会写bug的人;程序猿中打球最菜的人。 492

Python中module文件夹里__init__.py的功能

一般来说,需要引用python模块,可以用如下形式: import xxx import xxx as xx from xxx import xx 比如我们引入numpy模块: In [21]: import numpy In [22]: numpy Out[22]: <module 'numpy' from '/home/chia/anaconda2/lib/python2.7/sit...

VisualCortex 4425

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

关于Python项目文件夹里建立__init__.py的理解

在Python项目里为了便于管理代码逻辑,一般会把py文件(注意在Python里一个py文件被称作为一个Module)归档到相应的文件夹里。 1. 没有__init__.py 此时文件夹只是一个路径而已,需要导入里面的py文件(Module)里的属性、函数、类等需要如下访问方式: from 【文件夹.py文件名】 import 【该模块里的属性、函数、类】 2. 有__init__.py 当在文件夹里创建__init__.py文件能够使该文件夹变成一个Module, 当这个文件夹(Module)被imp

Watson的博客 6468

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

python 父路径_Python里你常常看到的 __init__.py 到底是个啥?

作者|小帅b来源 |学习python的正确姿势当你去看一些 Python 相关的项目时,常常会看到__init__.py,当你使用某些编辑器创建 PythonPackage 的时候,它也会自动给你生成一个__init__.py 文件。这玩意有什么用呢?我们知道, Python 中的包是可以包含多个 py 模块的,我们可以在不同的地方通过包名区分使用这些模块。话不多说,咱们先来...

weixin_39660922的博客 112

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python包里的__init__.py文件里,如果有__all__变量,这个变量用来干什么

变量,开发者可以明确指定哪些模块是包的公共接口,而不是暴露所有内部实现细节。这样可以提高包的可维护性,并避免意外地导入不必要的模块。文件中用于定义在导入该包时默认导入的模块名称列表。当一个包被导入时,Python 解释器会查找该包的。这种机制允许开发者控制导入包时默认导入的模块,从而提供更清晰的包接口。中指定的模块,而忽略其他模块。变量在 Python 包的。文件,并检查其中是否定义了。三个模块,但只希望在导入。变量,解释器将只导入。

laocooon的博客 703

Python中的init.py文件是什么?

在python中经常能看到文件,似乎没什么用的样子,有的时候甚至直接是空的,那么这个文件到底有什么用呢?对于一个python项目,里面的每一个文件夹都可以认为是一个package,而每一个.py文件被认为是一个module。如果你用的IDE是PyCharm,那么当你新建一个Python Package的时候,PyCharm都会自动为你新建一个__init__.py文件。这个__init__.py文件可以看作这个package的初始化文件,具体用途且看下文。

m0_53724467的博客 742

【Python】为什么要写__init__.py

【Python】为什么要写__init__.py

Dai的博客 2166

python导入其他py文件-python如何引用其他py文件里的函数

python引用其他py文件里的函数方法Python中在脚本中引用其他文件函数的方法在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址。所以如果要在当前脚本引用其他文件,除了将文件放在和脚本同一目录下,还有以下几种方法,1. 将文件所在位置添加到sys.path中import syssys.path....

weixin_37988176的博客 6675

python中import子目录module中py文件的方法

<br />python要import子目录module中的py文件,需要在module目录下放置一个__init__.py文件,__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理

cleanfield的专栏 4194

python里调用自己写的模块_Python中如何调用自制模块

有时候我们自己定义的一些方法,希望可以能够像python自定义的函数一样可以被调用。可以新建两个python包,里面会有__init__.py文件(其实python包和文件夹最大区别在于,python包中有__init__.py文件) 建好之后,我们在test.py中,调用我们在modulpython中写下的方法,方法写在pool.py文件中。 这是写在pool.py文件中的方法。我们可以直接在t...

weixin_39517199的博客 1582

python文件中的init_python中__init__.py文件的作用

python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。那么,__init__.py还有什么别的功能呢?其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。我们可以再__init__.py文件中再导入其他的包,或者模块。import readersimport writers...

weixin_39714835的博客 91

一个.py文件和一个文件夹(__init.__py)都可以叫一个module

一个.py文件和一个文件夹(__init.__py)都可以叫一个module

Kp0fS的草稿纸 305

Python2.7:引用(import)文件夹下的py文件的方法

文件夹包含内容: 在new.py中引入: 在被引入的文件夹下必须有 __init__.py文件(空白的也无所谓)可以自己新建。

u012369599的专栏 4536

python在init.py里定义全局变量_JavaScript全局变量和局部变量

变量可分为全局变量和局部变量。全局变量var a = 123; // 定义全局变量 console.log(window.a === a); // true 全局变量的值存储在window中,通过window.a可以拿到变量a的值,而之前直接console.log(a);也可以拿到变量a的值,是因为console.log(a);是从window上拿的,由此可以知道,window.a === a。局...

weixin_39969060的博客 1168
上一篇: 字节跳动MySQL学习笔记火了,完整版开放下载!
下一篇: 菜鸟刷题记!一道阿里算法面试题 ,来挑战不!
菜鸟学Python
博客等级 码龄9年 8086粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值