详解python包中的__init__.py

详解python包中的__init__.py


1、 包与模块,类,函数之间的关系

随着互联网和IOT的发展,我们在享受软件的强大和智能的同时,其背后与之对应的代码规模也越来越大。因此我们无法将所有的功能代码块都放在一个文件中去。于是我们根据功能进行拆分为一个个模块进行组织。当模块很多的时候,为了便于模块管理和防止模块重名,又引入了一个比模块更大的容器(包)来组织模多个块。

其实python的程序我们可以理解为有包,模块和模块中的函数和类组成。它们之间的关系如下图所示:

2、 如何创建一个包

创建一个包其实很简单,你只需要创建一个空的文件夹,然后在这个文件夹中放一个名为__init__.py这样的模块,里边什么都不用写。

这样一个包就成了。例如我在D盘跟目录下创建一个名为mypkg的包如下图所示。

注意包中的__init__.py这个模块不能少,否则就成文件夹了。其实本质上来讲包就是个文件夹。如果在pycharm中创建包更简单,直接在当前的工程名上点击右键,选择new菜单,然后选择python package即可,如下图所示。

3、 如何使用一个包中的模块

包中只有存放模块,包才有意义,在包外的主程序模块如何调用包中模块中的函数或类那?其实也是通过import关键字来实现的。

第一种导入方法如下图所示:

第二种导入方法如下图所示:

通过包名就可以有效的防止模块重名。

4、 包中的__init__.py模块有啥用

1、它的第一个作用就是用来识别它是一个包还是一个文件夹的作用。

2、可以用来做批量导入。

首先我在__init__.py中写入如下代码

然后我在test_module.py中可以不写导入random和re模块的导入语句,直接调用模块中的函数如下图所示:

其实import后跟包名,其实导入的是__init__.py模块,也就是说在导入时会自动执行包中的__init__.py模块中的代码。

3、当然也可以把__init__.py当做一个普通模块来使用,但是一般不推荐这样用。

在__init__.py中定义一个函数test_add.

然后在test_module.py中调用该包中__init__模块中的函数,如下图所示,直接通过包名来调用,从这个可以看出,包其实也是一个特殊的模块.导包就是导__init__.py模块。

以上就是勇哥给大家分享python中关于包的使用,喜欢的话可以在今日头条上关注码农阿勇或扫下方的二维码关注。我们会持续推出编程相关的实用文章和视频来分享给大家。另外python专栏中的视频有配套的电子版教材和相关资料包,购买专栏的用户别忘了问勇哥要。

相关文章

python引用外部代码的import机制

【导读】使用import导入额外代码经常报错?看完文章完美解决。▍目录python引用外部代码的方式绝对导入和相对导入结尾▍python引用代码的方式Python中引入代码包的方式包括绝对导入和相对导...

Python动态导入核心解析:按需加载模块的工程实践方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据Python官方性能测试,动态导入机制可使大型应用启动时间缩短35%-68%。本文通过6个生产案例,解析importlib模块...

python之包与模块

包的定义包:就是文件夹,包中还可以有包,即子文件夹,__init__.py是每一个python包必须存在的文件模块:一个个的python文件就是模块包----> 模块 ----> 函数包的...

7行代码,彻底告别python第三方包import导入问题!

最近有不少小伙伴咨询小叮当关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事。随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现各种各样的功能。但是...

Python异常模块和包

异常当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”, 也就是我们常说的BUG例如:以`r`方式打开一个不存在的文件。f = open('...