Python中__init__.py详解

转载至:https://mp.weixin.qq.com/s/PksqW03ZtlAiMhsTiH1lBg      

刚学python 同学,一定会留意到,当你每创建一个包的时候,下面就会自动给你创建一个__init__.py文件,那这个文件到底有啥用呢?接下来就带大家一起来认识一下。

  Python中__init__.py详解

        在平常大家导包的时候,是不是一般这样子import xxx.xxx.xxx 或者from xxx.xxx  import  xxx, 现在就有一个疑问来了,若是我现在想批量导入一些模块呢?

        肯定有同学就说了,一个一个导入不就行了吗?你这么说,其实也没错,还有其他的办法吗?

        这个时候__init__.py文件就用上了派场,因为在导包的时候,其实相当于是导入一个__init__.py文件,所以我们是不是在这个文件中配置好我们要导入的模块,就可以实现批量导入了呢?

看实例:

以上面的目录结构为例,我们在operConf下的__init__.py文件加入:

from operConf import confManage
from operConf import globalsManage
import os

再创建一个模块,把operConf这个包导进来,并且把我们打印一下我们引用模块的信息:

Python中__init__.py详解

 执行结果:

Python中__init__.py详解

 有没有发现这下就可以将我们所需要的模块全部导进来了?

        其实在__init__.py文件中,有一个很重要的变量__all__,我们其实只要配置了__all__,就可以在其他模块中直接from 包名 import * ,将配置在__all__列表中的所有模块全部一次性导入进来。

就以上面的为例,我们再优化一下:

我们在operConf下的__init__.py文件中优化为:

from operConf import confManage
from operConf import globalsManage
import os

__all__ = ["confManage", "globalsManage", "os"]

导入包并打印导入模块信息:

Python中__init__.py详解

 再执行一下:

Python中__init__.py详解

难道就这些吗?

不,当前你可以在__init__.py文件中导入模块中类、也可以在__init__.py文件中写入一些函数进行导入(不建议这样用)

上一篇:xor运算符在PHP和Visual Basic中的工作方式不同


下一篇:免杀基础[py调用shellcode]