__init__.py和__all__的作用

本文介绍了__init__.py在Python包导入过程中的作用,指出其能降低包导入复杂度并使目录成为Python包。同时,文章详细阐述了无__init__.py和有__init__.py时的导入区别,强调了__init__.py的接口封装功能。此外,还解释了__all__的作用,当设置__all__后,from module import *将只导入__all__中指定的成员。

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

经常在Python工程的源代码目录中发现__init__.py这样一个文件,那么这个文件发挥着怎样的作用呢?本文主要总结__init__.py在Python工程中发挥的作用。

1. __init__.py的作用

__init__.py在进行包(Packages)导入的过程中发挥重要作用,可以极大的降低包导入的复杂度,并且包含__init__.py文件的目录会自动被识别为Python的包,而不包含__init__.py文件的目录仅是一个普通目录。

对于下面的代码结构,我们分别演示无__init__.py文件和有__init__.py文件时的功能模块导入过程。该工程中包含两个模块(moduleA和moduleB),每个模块中都包含两个子模块(subModule1和subModule2),每个子模块中都有一个功能的具体实现。
在这里插入图片描述

1.1 无__init__.py时的包导入过程

我们首先来看无__init__.py文件时的包导入过程。
在没有__init__.py时,如果我们需要在main.py文件中导入子模块中的功能,需要通过下面的方式导入:

# 导入funcAdd()功能
from moduleA.subModule1.funcAdd import funcAdd

也就是需要逐层的遍历需要导入的那个模块所在的目录,才能最终导入目标功能模块。若是目标功能模块在代码目录中嵌套的比较深,导入起来就比较麻烦,需要知道目标功能在整个代码目录中的嵌套关系。

1.2 有__init__.py时的包导入过程

我们在moduleA目录中新建__init__.py文件,并在填写如下内容

from .subModule1.funcAdd import funcAdd

这个时候同样是在main.py中导入funcAdd()功能,仅需如下方式就可以

from moduleA import funcAdd

1.3 总结

__init__.py发挥了接口封装的作用,可以通过__init__.py将需要呈现的接口暴露给上一层,从而避免复杂的导入过程。

2. __all__的作用

__all__起到了在模块导入时起到了限制作用,若模块中定义了__all__,在使用from module import *进行导入时,仅__all__中指定的成员可以被导入。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值