龙空技术网

python __init__.py是干什么的?

爱数据的小司机 552

前言:

当前姐妹们对“python的_init_”大概比较关切,我们都需要分析一些“python的_init_”的相关文章。那么小编同时在网络上搜集了一些对于“python的_init_””的相关知识,希望咱们能喜欢,朋友们一起来学习一下吧!

我们经常在python的模块包中会看到 "__init__.py" 这个文件,那么它到底是干嘛用的?

简单点说就是:__init__.py 文件的作用是将文件夹变为一个Python模块包,一个包是一个带有特殊文件 __init__.py 的目录。

因此,Python 中的每个模块的包中,都有__init__.py 文件,只要我们创建一个模块包,那么在import的时候就会自动生成一个__init__.py文件。

通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。

package/

__init__.py

model1.py

model2.py

model3.py

如果说,model1.py中有一个方法hello,那么要使用hello方法可以直接通过from package.model1 import hello来导入hello;

我们也可以这样操作:在package下面的__init__.py文件中写入:from .model1 import hello,然后通过from package import hello来导入hello方法。

可能这样一看觉得__init__.py文件好像用处不大,但是如果是大型包,就显得尤其重要了。

最近看了一下python后端的框架flask,我们可以方便的从flask直接导入Flask,request,render_template,url_for, flash,redirect...模块,其实都是在flask下的__init__.py文件中导入了。

如下图,比如,redirect模块本来是werkzeug.utils下面的模块,但是通过flask的__init__.py文件,可以直接从flask导入使用,对于大型框架,模块众多,这样写就好处多多了!

__init__.py 中还有一个重要的变量,叫做‘__all__’。

from lib import *

这时 import 就会把注册在包__init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。

比如:

#文件__init__.py

__all__ = ["mod1", "mod2",]

通过from lib import * 就可以把all中的mod1,mod2模块全部导入

标签: #python的_init_ #python中_init_