python模块中__init__.py的作用
基本概念
先上结论
举例解释
实验一:不包含__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的作用的更多相关文章
- python包中__init__.py的作用
		
1.__init__.py定义包的属性和方法 一般为空文件,但是必须存在,没有__init__.py表明他所在的目录只是目录不是包 2.导入包的时候使用 例如有一个test目录,test下有xx1.p ...
 - Python包中 __init__.py文件的作用
		
原创连接 https://www.cnblogs.com/AlwinXu/p/5598543.html Python包中 __init__.py文件的作用 在创建python包的过程中,IDE都会在包 ...
 - python包中__init__.py文件的作用
		
python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...
 - Python包中__init__.py作用
		
在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下: Pycharm下的package树结构: 在Finder中的目录结 ...
 - python中__init__.py的作用、module和package
		
控制包的导入行为: 1.声明当前文件是一个可导入的包: 2.如果当下包下有多个.py文件使用__ all__ = [ '模块名'],也就是form XXX import YYY module和pack ...
 - python中__init__.py文件的作用
		
问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...
 - 转载:【学习之家】Python中__init__.py文件的作用
		
Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...
 - Python中__init__.py文件的作用详解
		
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
 - python中__init__.py与def __init__(self)的使用
		
一直对__init__的使用很迷茫,这里系统的学习了解下 1.__init__.py文件-package的标识 python中每个package实际上是一个目录(Directory),程序运行时如何识 ...
 
随机推荐
- mybatis异常:nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType
			
异常详细 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Builde ...
 - Java中map接口 遍历map
			
转自:https://www.cnblogs.com/wjk921/p/4918442.html java集合框架用于存储数据,也被称为集合类 位于java.util包下 java.util包下常用接 ...
 - Linux_kernel_exploits
			
功能:自动生成UAF类型漏洞exp文件的工具,目前缺少文档介绍,可以参考test文件下的使用实例,但是源码中缺少dataflowanalyzer模块 相关内容:源码路径https://github.c ...
 - JVM垃圾回收重要理论剖析【纯理论】
			
JVM学习到这里,终于到学习最兴奋的地方了---垃圾回收,在学习它之前还得对JVM垃圾回收相关理论知识进行了解,然后再通过实践来加深对理论的理解,下面直接开始了解相关的理论: JVM运行时内存数据区域 ...
 - No.1.测试Synchronized加锁String字符串后的多线程同步状况
			
测试目的描述 Synchronized关键字锁定String字符串可能会带来严重的后果, 尽量不要使用 synchronized(String a) 因为JVM中,因为字符串常量池具有缓冲功能! 接下 ...
 - spring boot学习笔记(一)
			
(翻译看个人意愿) 官方介绍: Spring Boot makes it easy to create stand-alone, production-grade Spring based Appli ...
 - sql:拼接字符串、截取字符串、取字符串长度
			
--第一段 SELECT substr('1233***6795', 0, (select instr('1233***6795', '***', 1, 1) from dual) - 1) from ...
 - node gyp编译所需要的环境
			
安装ms的build工具包,自带python npm install --global --production windows-build-tools
 - stm32自带的flash分布图
			
缘由是要用到flash来保存数据,因此查阅了数据手册与参考手册,一般情况下,将要保存的数据存放到比较靠后的地方,page254,page255,4k字节,已经相当多的了,
 - [JSOI2015]最大公约数
			
题意:给一个序列a[1],a[2],a[3]...a[n],求其中连续的子序列A[L],A[L+1],...,A[R],使其权值 W(L,R)=(R-L+1)×gcd(A[L],...,A[R])最大 ...