包导入基础知识

# -*- coding: utf-8 -*-
#python 27
#xiaodeng
#包导入基础知识


#注意:
#除了模块名之外,导入也可以指定目录路径。python代码的目录就称为包,因此这类导入就称之为包导入。
#实际上,包导入时把计算机上的目录变成另一个python命名空间,而属性则对应于目录中所包含的子目录和模块文件。
#这是高级特征,他提供了层次,对于组织大型系统内的文件很方便。而且可以简化模块搜索路径的设置。



#包导入的运作机制:
#在import语句中列举简单文件名的地方,可以改成列出路径的名称,彼此以点号相隔。
#需要有__init__语句

import dir1.dir2.mod    #主要要是python所能搜索到的路径才行。
    #dir1:表明机器上有一个dir1目录
    #dir2:表明dir1内部包含dir2目录
    #mod:dir2目录下有一个mod.py文件


#__init__包文件
#如果选择使用包导入,就必须多遵循一条约束:包导入语句的路径中的每个目录内都必须有__init__.py文件。【注意是每个目录】
#如上例子,在dir1和dir2目录下面都必须包含__init__.py文件。
#容器目录dir() 也就是顶层目录不需要这类文件,因此其本身没有列在import语句之中。




#__init__.py文件需要遵循的规则:
#dir1和dir2都必须包含一个__init__.py文件
#dir()是容器,不需要__init__.py文件,即便是有,这个文件也会被忽视。其语言本身做了处理
#dir()必须列在模块搜索路径上(即:此目录必须是主目录,或者列在pythonpath之中)
#结构基本说明:
dir()
    dir1
        __init__.py
        dir2
            __init__.py
            mod.py
#__init__.py本身扮演了包初始化的钩子,替目录产生模块命名空间及使用目录导入时实现from行为的角色



#包初始化:
#python导入某个目录时,会自动执行该目录下__init__.py文件中的所有程序代码。因此,这类文件自然就是
#放置包内文件所需要初始化的代码的场所。


#模块命名空间的初始化
#在包导入的模型中,脚本内的目录路径,在导入后会变成真实的嵌套对象路径。


#from*语句的行为
#作为一个高级功能,可以在__init__.py文件内使用__all__列表来定义目录以from*语句形式导入。
#__all__,上面会列出应该导入的子模块的名称清单。
原文地址:https://www.cnblogs.com/dengyg200891/p/4921937.html