知行编程网知行编程网  2022-05-21 07:00 知行编程网 隐藏边栏 |   抢沙发  7 
文章评分 0 次,平均分 0.0

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

作者 | 小帅b

来源 | 学习python的正确姿势


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




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




这玩意有什么用呢?


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

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



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



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


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




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




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




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



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

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



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



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

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



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



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



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



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




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



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

这次再导入:



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



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

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



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



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

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

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




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



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



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



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


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



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



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

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

希望对你有帮助。

<p style="text-align: left;"><strong style="color: rgb(2, 30, 170);font-size: 15px;letter-spacing: 0.544px;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;white-space: pre-wrap;">近期八大热门:</strong><br  /></p><section style="padding-right: 15px;padding-left: 15px;font-size: 15px;letter-spacing: 1px;line-height: 2;"><section data-mpa-template="t" mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)" data-style="color: rgb(62, 62, 62); font-size: 15px; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); font-family: monospace; text-align: left; widows: 1; word-spacing: 2px; caret-color: rgb(255, 0, 0); white-space: pre-wrap;" class="js_darkmode__90" style="letter-spacing: 0.544px;text-align: start;caret-color: rgb(255, 0, 0);white-space: pre-wrap;"><section mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" class="js_darkmode__91" style="letter-spacing: 0.544px;font-size: 16px;color: rgb(63, 63, 63);word-spacing: 1px;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" class="js_darkmode__92" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" class="js_darkmode__91" style="letter-spacing: 0.544px;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" class="js_darkmode__92" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)"><section powered-by="xiumi.us" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="margin-right: 0em;margin-left: 0em;"><pre data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-original-color="rgb(62, 62, 62)" data-style="letter-spacing: 0.544px; font-weight: 700; text-align: -webkit-center; background-color: rgb(255, 255, 255); font-size: 16px; color: rgb(62, 62, 62); widows: 1; word-spacing: 2px;" class="js_darkmode__26" style="letter-spacing: 0.544px;caret-color: rgb(51, 51, 51);color: rgb(62, 62, 62);text-align: center;word-spacing: 2px;"><section style="font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(145, 53, 24);letter-spacing: 0.38px;"><pre style="letter-spacing: 0.544px;color: rgb(62, 62, 62);text-align: left;"><ul class="list-paddingleft-2" style="width: 577.422px;"><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!<br  /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密<br  /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;color: rgb(0, 0, 0);">用Python一键生成炫酷九宫格图片,火了朋友圈<br  /></span></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记<br  /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;">Github获8300星!用Python开发的一个命令行的网易云音乐<br  /></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;color: rgb(0, 0, 0);">一道Python面试题,硬是没憋出来,最后憋出一身汗!</span></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;color: rgb(0, 0, 0);">卧槽!Pdf转Word用Python轻松搞定!</span></section></li><li style="text-align: left;font-size: 15px;"><section style="line-height: 2em;"><span style="text-decoration: underline;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;color: rgb(0, 0, 0);">教你6招,不错的Python代码技巧!</span></section></li></ul>
<p style="text-align: left;"><br  /></p><section style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);font-size: 16px;color: rgb(63, 63, 63);text-align: start;widows: 1;word-spacing: 1px;line-height: inherit;"><section data-mpa-template="t" mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)" data-style="color: rgb(62, 62, 62); font-size: 15px; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); font-family: monospace; text-align: left; widows: 1; word-spacing: 2px; caret-color: rgb(255, 0, 0); white-space: pre-wrap;" class="js_darkmode__90" style="letter-spacing: 0.544px;line-height: inherit;"><section mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)" style="letter-spacing: 0.544px;line-height: inherit;"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" class="js_darkmode__91" style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" class="js_darkmode__92" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="letter-spacing: 0.544px;line-height: inherit;"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" class="js_darkmode__91" style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" class="js_darkmode__92" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="letter-spacing: 0.544px;line-height: inherit;"><section powered-by="xiumi.us" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="letter-spacing: 0.544px;line-height: inherit;"><pre data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-original-color="rgb(62, 62, 62)" data-style="letter-spacing: 0.544px; font-weight: 700; text-align: -webkit-center; background-color: rgb(255, 255, 255); font-size: 16px; color: rgb(62, 62, 62); widows: 1; word-spacing: 2px;" class="js_darkmode__26" style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: inherit;"><section style="letter-spacing: 0.544px;line-height: inherit;"><pre style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: inherit;"><section style="letter-spacing: 0.544px;line-height: inherit;"><strong><span style="font-size: 15px;color: rgb(0, 0, 0);">菜鸟编程大本营,现已正式上线!</span></strong></section>
<p style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);"><br  /></p><p style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);"><span style="font-size: 15px;">接下来我们将会在该上,为大家<strong>分享优质编程语言里趣味的干货,通俗易懂的实战案例,经验分享,让菜鸟也爱上编程。</strong></span></p><p style="font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);"><br  /></p><pre style="letter-spacing: 0.544px;caret-color: rgb(51, 51, 51);line-height: inherit;"><section style="margin-right: 8px;margin-left: 8px;padding-right: 0.5em;padding-left: 0.5em;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;text-align: center;"></section>

长按 2秒,输入:【书单

获取Python精选书籍

<section data-darkmode-color-15968917432472="rgba(163, 163, 163, 0.9)" data-darkmode-original-color-15968917432472="rgba(230, 230, 230, 0.9)" data-darkmode-bgcolor-15968917432472="rgb(25, 25, 25)" data-darkmode-original-bgcolor-15968917432472="rgb(255, 255, 255)" style="margin-right: 8px;margin-left: 8px;min-height: 1em;text-align: left;"><span style="color: rgb(217, 33, 66);">点击阅读原文,直达菜鸟B站视频干货!</span></section>

本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

你可能也喜欢

热评文章

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享