__init__.py文件作用

  • 0 前言
  • 1 作为包表示
  • 2 __init__.py什么时候执行
  • 3 定义包的方法和属性
  • 3 简化模块导入
  • 总结


0 前言

我们在pycharm等IDE中,我们可以选择新建一个python package或者一个directory。选择两种都会新建一个文件夹,不同的是,新建python package会在文件夹下自动创建一个__init__.py文件。那么这个__init__.py文件有什么作用呢?本篇文章就来一探究竟。

1 作为包表示

在IDE中新建python package会在文件夹下自动创建一个__init__.py文件是为了区分的文件夹和python的package。换句话说__init__.py是作为python包的标识。在python中module文件来实现的,一个py文件就是一个module。而python的package是用文件夹来实现的,文件夹中添加一个__init__.py就变成了一个module,可以使用import导入。没有添加__init__.py文件的文件夹不是python的包,如果使用import导入会,找不到包。

2 init.py什么时候执行

init.py是一个python文件,既然是一个python文件,那就是可以写入python代码,可是里面应该写什么样的代码呢?
为了回答这个问题,我们首先要弄明白,这里的代码会会在什么时候执行。
init.py里的代码是在模块导入的时候执行。
module里的代码会在导入模块的时候执行。
知道了__init__.py的执行时机,就可以根据这个特性来发挥它的作用。

3 定义包的方法和属性

在__init__.py里可以定一些变量和方法,这些变量和方法是属于包的。可以直接使用包名.属性名或者包名.方法名进行调用。(定义在模块里属性和方法,也可以使用模块名.属性或者模块名.方法进行调用)。
可以将一些与环境初始化相关的属性放在__init__.py文件,这样在import的时候就会被执行,为后面程序的执行做好准备。

3 简化模块导入

使用import进行模块导入,如果需要导入的子模块比较多的话,我们往往会使用import parent *导入parent 下的所有子模块,来检查导入操作。这个操作其实是由__init__.py下的__all__支持的。将需要导入的模块放在__all__构成一个列表,import parent *时就会将__all__里指定的包全部导入。
注意:在parent 包的内部引用parent的子模块,也需要写上带有parent 的完成模块路径

总结

  1. 标识包
  2. 定义包的属性和方法,用于执行一些初始化操作
  3. 简化包的导入

参考文章:

  1. python基础:init.py和__init__函数的作用
  2. Python init.py 作用详解