什么是包

    包的本质就是文件夹

  为什么要使用包

    函数可以使得同一个文件中代码结构更清晰

    模块(py文件)是以文件形式来组织代码结构

    如果文件越来越多管理起来也不方便,所以需要使用文件夹来管理,从文件夹级别来管理代码

  包的使用

    如何创建包

    新建一个文件夹就是一个包

    包和文件夹仅有一个区别,包中应该包含一个__init__.py文件

 

__init__.py文件的作用

  包也是模块

    在导入一个模块时发生了三件事都是一样的

    问题是,第二步需要执行被导入文件的代码,包只是一个文件夹不能直接执行,所以需要提供一个py文件用来代替这个包成为一个模块

    init初始化单词的缩写,表示对包中的内容进行初始化

    包的初始化其实就是导入这个包中所有其他模块

  总结:导入包时,本质上就是在导入包下的__init__.py文件

  注意:init文件的作用仅仅是导入包内模块,提供给外界使用,不应该在里面写任何的逻辑代码

 

  init是可选的,可有可无

    在py2中,要求必须有.py3是可选

    如果没有提供init文件,在使用模块时就直接使用(文件夹.需要的模块名称)

  

  init的好处

    可以将包内模块的功能直接导入到__init__中,这样一来对于包的使用者而言,可以无需考虑要使用的功能在哪个文件中,直接调用功能即可

    

使用包的流程

  1.创建一个包

  2.编写包的内容的模块代码

  3.写完后打开init文件,将需要提供给外界使用的模块导入其中

 

相对导入和绝对导入

  相对

    指的是相对于某个模块而言的导入路径

    语法:

      from. import 名称

      .表示的是当前这一级目录

      再加一个点表示上一级即..

  注意:执行文件中不能使用相对导入 

     使用相对导入时不能使用点返回到执行文件所在层,否则报错:

     ValueError:attempted relative import beyond top-level package

      相对导入,超出的顶层包

  相对导入仅用于同一个包内的模块间相互导入

 

  绝对

    指的是从执行文件开始的绝对路径,注意不是文件的绝对路径

 

  导入时需要注意:

    1.import导入时,点的后面必须是一个模块或包名

    2.from导入式 import后面不能出现点

 

循环导入

  开发时模块可能有很多,极有可能出现循环导入

  循环导入指的是

    两个模块,相互导入,你导入我,我导入你

    会出现以下错误:AttributeError:module 'm1' has no attribute 'show_info'

    解决方案是不要循环导入,这是设计问题

 

 

 

 

 

 

 

 

 

 

 

    

 

posted @ 2019-01-21 12:49  -Rye-  阅读(108)  评论(0)    收藏  举报