基本概念
先上结论
举例解释
实验一:不包含__init__.py
实验二:A中包含__init__.py
实验三:A.A_A中也包含__init__.py
进阶
基本概念
概念 解释
import 即导入,方式就是在import位置将代码文件拷贝过去。
模块 python中一个.py文件就是一个模块
包 指软件包,举例import matplotlib.pyplot中(其中pyplot非函数,至少是一个模块或者包),matplotlib就是一个软件包。
先上结论
__init__.py的作用是让一个呈结构化分布(以文件夹形式组织)的代码文件夹变成可以被导入import的软件包。

举例解释
为了形象地解释,我建立了一个test文件夹,其中一个文件夹A打算建立成一个软件包,然后尝试在B文件夹的的run.py文件下导入A包中的模块。

实验一:不包含__init__.py
test文件夹中包含的文件如下:

此时如果在B/run.py中运行以下语句的结果为:

语句 运行结果
import A ImportError: No module named A
import A.A_A ImportError: No module named A.A_A
import A.A_B ImportError: No module named A.A_B
结论:此时A并不能被当成是一个软件包。

实验二:A中包含__init__.py
A文件夹下包含__init__.py,test文件夹结构变为如下:

在B/run.py中运行以下语句的结果依次列在表中:

语句 运行结果
import A 成功
import A.A_A ImportError: No module named A_A
import A.A_B 成功
结论:由A.A_B能被成功import看出此时A已经是一个软件包,因为A下的.py文件已经能够程序识别出来。但是由于A下的A_A还不是一个软件包,所以A.A_A还不能被导入。

实验三:A.A_A中也包含__init__.py
A文件夹及其子文件夹下都包含__init__.py,test文件夹结构变为如下:

在B/run.py中运行以下语句的结果依次为:

语句 运行结果
import A.A_B 成功
import A.A_A 成功
import A.A_A.A_A_A 成功
结论:此时A及其子文件夹A_A都成功变成软件包,其中的模块可以被任意导入。

进阶
在上述实验中,发现导入A时并未将其下的子模块自动导入,当__init__.py文件不为空时,其中可以填写from . import A_A类似语句实现自动子模块导入。

不含有__init__.py的包也可以当作命名空间包使用,使命名一致的包被统一管理。

参考链接:https://blog.csdn.net/yucicheung/article/details/79445350

python模块中__init__.py的作用的更多相关文章

  1. python包中__init__.py的作用

    1.__init__.py定义包的属性和方法 一般为空文件,但是必须存在,没有__init__.py表明他所在的目录只是目录不是包 2.导入包的时候使用 例如有一个test目录,test下有xx1.p ...

  2. Python包中 __init__.py文件的作用

    原创连接 https://www.cnblogs.com/AlwinXu/p/5598543.html Python包中 __init__.py文件的作用 在创建python包的过程中,IDE都会在包 ...

  3. python包中__init__.py文件的作用

    python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...

  4. Python包中__init__.py作用

    在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下: Pycharm下的package树结构: 在Finder中的目录结 ...

  5. python中__init__.py的作用、module和package

    控制包的导入行为: 1.声明当前文件是一个可导入的包: 2.如果当下包下有多个.py文件使用__ all__ = [ '模块名'],也就是form XXX import YYY module和pack ...

  6. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  7. 转载:【学习之家】Python中__init__.py文件的作用

    Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...

  8. Python中__init__.py文件的作用详解

    转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...

  9. python中__init__.py与def __init__(self)的使用

    一直对__init__的使用很迷茫,这里系统的学习了解下 1.__init__.py文件-package的标识 python中每个package实际上是一个目录(Directory),程序运行时如何识 ...

随机推荐

  1. go语言实现分布式id生成器

    本文:https://chai2010.cn/advanced-go-programming-book/ch6-cloud/ch6-01-dist-id.html 分布式id生成器 有时我们需要能够生 ...

  2. mtd交叉编译mkfs命令

    下载 mtd:ftp://ftp.infradead.org/pub/mtd-utils/ zlib:http://www.zlib.net/ lzo:http://bouchez.info/lzo. ...

  3. Spring中Bean的基本概念

    一.Bean的定义 <beans…/>元素是Spring配置文件的根元素,<beans…/>元素可以包含多个<bean…/>子元素,每个<bean…/> ...

  4. 阿里P7整理20个非常有用的Java程序片段,你知道吗?

    1.字符串有整型的相互转换 String a = String.valueOf(2);  //integer to numeric string   int i = Integer.parseInt( ...

  5. MySQL Index--NOT IN和不等于两类操作无法走索引?

    经常被问,NOT IN和<>操作就无法走索引? 真想只有一个:具体问题具体分析,没有前提的问题都是耍流氓. 准备测试数据: ## 删除测试表 DROP TABLE IF EXISTS tb ...

  6. RestTemplate的GET与POST

    发送GET请求: //设置请求头HttpHeaders headers = new HttpHeaders(); headers.add("token",PostUtils.get ...

  7. (备忘)Java web项目迁移到Centos7中验证码无法显示

    每天多学一点知识. 今天部署项目的时候出现验证码无法显示的问题,如下图所示:

  8. containerd简述

    containerd是容器虚拟化技术,从docker中剥离出来,形成开放容器接口(OCI)标准的一部分. docker对容器的管理和操作基本都是通过containerd完成的.Containerd 是 ...

  9. Kubernetes-使用Helm安装istio

    添加istio库: helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.3.4/charts/ ...

  10. macOS 10.13允许任何来源开启方法

    软件下载网站: http://www.pc6.com/ 软件安装问题: macOS 10.13允许任何来源开启方法: 如果需要恢复允许“任何来源”的选项,即关闭系统的Gatekeeper,我们可以在“ ...