基本概念
先上结论
举例解释
实验一:不包含__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. oracle in和exists区别

    in和exists http://oraclemine.com/sql-exists-vs-in/ https://www.techonthenet.com/oracle/exists.php htt ...

  2. nginx 高并发配置参数

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...

  3. Java中重载(overloading)和重写(Overriding)的区别

    一:方法的重载 (1)方法重载指在类中定义方法名相同,参数不同的不同的多个方法(返回值类型可随意,不能以返回类型作为重载函数的区分标准). 参数不同表现: 1.参数的个数不同 2.参数的类型不同 3. ...

  4. urlib库

    urllib库是python中最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送请求,并可以保存服务器返回的数据. urlopen() urllib.request模块提供了最基本的构造ht ...

  5. Zabbix-报警之微信(Wechat alert)告警

    1.前言 Zabbix告警发送是监控系统的重要功能之一.Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式 ...

  6. 创建htpasswd文件在nginx (没有 apache)

    Create htpasswd file for nginx (without apache) APACHE NGINX HTACCESS If you're like me, and use Ngi ...

  7. FFmpeg---源码编译

    @https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu  , FFmpeg官方给出了详细的编译步骤 @https://legacy.gitbook. ...

  8. 超全整理!Linux shell及常用36类命令汇总

    本文采编自http://blog.csdn.net,作者为ZHXGXN,版权归作者所有! 使用Linux shell是一些程序员每天的基本工作,但我们经常会忘记一些有用的shell命令和技巧.当然,命 ...

  9. css Grid布局

    CSS Grid 布局完全指南(图解 Grid 详细教程)https://www.html.cn/archives/8510#prop-grid-gap 5分钟学会 CSS Grid 布局https: ...

  10. 行为型模式(三) 迭代器模式(Iterator)

    一.动机(Motivate) 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素:同时这种"透明 ...