python包

包(package):在Python中不止有模块,还有另外一个概念,叫做包,包是作为文件夹存在的,文件夹中必须存在__init__.py文件,包可以包含模块,也可以包含其它包。

封装成包是很简单的。在文件系统上组织你的代码,并确保每个目录都定义了一个 __init__.py 文件。例如:
graphics/
    __init__.py
    primitive/
        __init__.py
        line.py
        fill.py
        text.py
    formats/
        __init__.py
        png.py
        jpg.py

__init__.py文件的作用:

   1)__init__.py 是 Python 中包的标识。普通的文件夹是不能通过 import 被其它模块使用的,但是创建了 __init__.py 文件后,该文件夹就

      成为一个 package,它下面的所有模块都能被导入。

   2)相当于 class 中的 def __init__(self) 函数,可以在里面放置代码来初始化包。如果第一次执行下面语句:

import graphics

      则文件 graphics/__init__.py 将被导入, 因为.py文件是一个模块,所以 __init__.py 的导入流程就是模块的导入,可阅读博客:python模块

      所以会建立 graphics 命名空间的内容。

      如果执行下面的语句:

import graphics.format.jpg

      文件 graphics/__init__.py 和文件 graphics/formats/__init__.py 将在文件 graphics/formats/jpg.py 导入之前导入。

      绝大部分时候让 __init__.py 空着就好。但是有些情况下可能包含代码。举个例子,__init__.py 能够用来自动加载子模块:

# graphics/formats/__init__.py
from . import jpg
from . import png

      像这样一个文件, 用户可以仅仅通过 import grahpics.formats 来代替 import graph-ics.formats.jpg 以及 import graphics.formats.png。

   3)当使用 from module import * 语句时,希望对从模块或包导出的符号进行精确控制。在__init__中定义一个变量 __all__ 来明确地列出需要导出的模块和包

      如果 __all__ 存在于普通模块中,那就是用来限定需要导出的函数和变量

  

 

posted @ 2020-06-28 07:42  _yanghh  阅读(506)  评论(0编辑  收藏  举报