16_Python的包package

1.包的概述

    1.包是将模块一文件夹的组织形式进行分组管理的方法,一系列模块进行分类管理有利于防止命名冲突

    2.包是一个包含多个模块的特色目录,目录下有一个特色的文件__init__.py

    3.包的命名规则和变量命名规则一样由字母数字和下划线且不以数字开头组成,推荐使用小写字母加_的命名方式

    4.使用import包名可以一次导入包中的所有模块,也可以在需要时加载一个或部分模块而不是全部模块

    5.在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表,即在__init__.py文件中写入import导入语句

2.包的导入语法

    1.如果是直接导入一个包,那么相当于执行了这个包中的__init__文件

    2.Python解释器并不会帮你把这个包下面的其他包以及py文件自动的导入到内存

    3.如果希望直接导入包之后,所有的这个包下面的其他包以及py文件都能直接通过包来引用,那么要处理__init__文件

import 包名  # 相当于执行了包下面的__init__文件
import 包名 as 包别名
import 包名.模块名 as 模块新名
import 包名.子包名.模块名 as 模块新名
from 包名 import 模块名 as 模块新名
from 包名.子包名 import 模块名 as 模块新名
from 包名.子包名.模块名 import 属性名 as 属性新名
from 包名 import *
from 包名.模块名 import *

3.包目录下的__init__.py文件

    __init__.py会在导入包时被自动调用,是常规包内必须存在的文件

    __init__.py文件可以编写此包的内容,可以在内部添加包的文档字符串,可以加载此包所依懒的其它模块

4.包的__all__列表

    1.用来记录此包中有哪儿些子包或模块需要导入,当用from 包名 import * 语句导入时,只查找__all__中的模块或子包

    2.__all__列表只在from 包名 import *语句时起作用;当子包或子包内的模块被导入时,上一层的包也会被先导入

# 实质会先导入mypack,再导入games,再导入contra
import mypack.games.contra

5.包的相对导入

    1.概述:
        1.包的相对导入是指包内的模块的相互导入,导入时不能超出包的外部,要避免循环导入
        2.相对导入路径:
            在 from xxx import 语句中, xxx部分可以使用相对路径
            . 代表当前目录
            .. 代表上一级目录
            ... 代表上二级目录
            .... 以此类推

    2.语法:
        from 相对路径包或模块 import 属性或模块名
        from 相对路径包或模块 import *

原文地址:https://www.cnblogs.com/tangxuecheng/p/13561538.html