包 什么是包 的本质是文件夹 为什么使用包 函数可以使得同一个文件中代码结构更清晰 模块(py文件)是以文件形式来组织代码结构 如果文件越来越多管理起来也不方便,所以需要使用文件夹来管理,从文件夹级别来管理代码 包的使用 如何创建包 新建一个文件夹就是一个包 包和文件夹仅有一个区别就是 包中应该包含一个__init__.py文件 __init__.py文件的作用 包也是模块 在导入一个模块时发生三件事都一样 问题是,第二步需要执行被导入文件的代码,包只是个文件夹不能直接执行, 所以需要提供一个py文件用来代表这个包成为一个模块 init初始化单词的缩写,表示对包中的内容进行初始化 包的初始化其实就是导入这个包中所有其他模块 总结:导入包时本质上就是在导入包下的__init__.py文件 注意:init文件的作用仅仅是导入包内模块,提供给外界使用,不应该在里面写逻辑代码 init是可选的 可有可无 在py2中 要求必须有,py3是可选 如果没有提供init文件 在使用模块时就直接使用文件夹点需要的模块名称 init 的好处 可以将包内模块的功能直接导入到__init__中 这样一来对于包的使用者而言 可以无需考虑要使用的功能在哪个文件中,直接调用功能即可 使用包的流程 1.创建一个包 2.编写包内部的模块代码 3.写完之后打开init文件,将需要提供给外界使用的模块导入其中(可以省略,可以不提供init) 相对导入和绝对导入 相对? 指的是相对于某个模块而言的导入路径 语法: from . import 名称 .表示的是当前这一级目录 再加一个点表示上一级即.. 注意:执行文件中不能使用相对导入 1.使用相对导入时不能使用点返回到执行文件所在的一层, ValueError: attempted relative import beyond top-level package 相对导入 超出了顶层包 2.相对导入仅用于同一个包内的模块间相互导入 绝对? 指的是从执行文件开始的绝对路径,注意不是文件得绝对路径 导入时需要注意: 1.import 导入时,点的后面必须是一个模块或包名 2.from导入式 import 后面不能出现点 循环导入 开发时模块可能有很多,极有可能出现循环导入 循环导入指的是 两个模块 相互导入 你导入我 我导入你 会出现以下错误:AttributeError: module 'm1' has no attribute 'show_info' 解决方案就是不要循环导入,这明显是设计有问题.