库初始化文件__init__.py其实工作作用类似类初始化__init__(self)

本文详细解析了Python中__init__.py文件的功能,包括如何通过它使文件夹被识别为库,以及在导入库时__init__.py文件的执行机制。文章还介绍了如何使用__all__来限制导入范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

库初始化文件__init__.py其实工作作用类似类初始化__init__(self).
类的初始化函数__init__.py就是每次实例化类的时候都会进行调用。
文件夹里面如果包含了__init__.py文件就会识别为一个库(lib),当其他文件进行导入这个库的时候就会运行__init__.py
举例说明:
比如先创建了如图目录:
在这里插入图片描述
testTmp下__init__.py内容如下:

#coding=utf-8
print("你现在导入了这个包!")
a=1
b=2
__version__="0.0.0"
import sys
print(sys.version_info)

father1下内容如下:

#coding=utf-8
print("你现在导入了包father1!")
a=1
b=2
print("father1")

father2代码如下:

#coding=utf-8
print("你现在导入了包father1!")
a=1
b=2
print("father1")
son1代码如下:
import testTmp
#coding=utf-8
print("你现在导入了包son1!")
a=1
b=2
print("son1")

运行son1.py的结果如下:

D:\AUTO\Python3.8\python.exe D:/AUTO/WEBAuto_pythonV2.3_20200323/testTmp/sonlib/son1.py
你现在导入了这个包!
sys.version_info(major=3, minor=8, micro=0, releaselevel='final', serial=0)
你现在导入了包son1!
son1

Process finished with exit code 0

从结果可以看出,son1.py运行的时候,导入testTmp包的时候同时运行了下面的__init__.py文件

现在我们再修改son1.py为:

#coding=utf-8
from  testTmp import father1
print("*****************")
from testTmp import father2
print("+++++++++++++++++++++++")
print("你现在导入了包son1!")
a=1
b=2
print("son1")

运行结果为:

D:\AUTO\Python3.8\python.exe D:/AUTO/WEBAuto_pythonV2.3_20200323/testTmp/sonlib/son1.py
你现在导入了这个包!
sys.version_info(major=3, minor=8, micro=0, releaselevel='final', serial=0)
你现在导入了包father1!
father1
*****************
你现在导入了包father2!
father2
+++++++++++++++++++++++
你现在导入了包son1!
son1

Process finished with exit code 0

从上面结果可以看出导入库下面的某个子目录也会运行__init__.py文件,同时如果导入这个库下面的多个文件只会运行一次。
工作原理等同类里面的方法,实例化类会运行一次__init__()方法,后面调用其他方法的时候就不会再多次初始化。库则是导入库只运行__init__.py文件一次。

***如果在导入库的时候不想导入下面的子文件,则用__all__限制导入范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值