Python Cookbook 3rd Edition Documentation - 10.1 构建一个模块的层级包 - `__init__.py` 文件的作用

Python Cookbook 3rd Edition Documentation - 10.1 构建一个模块的层级包 - __init__.py 文件的作用

1. Python Cookbook 3rd Edition Documentation
https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html

2. GitHub
https://github.com/yidao620c/python3-cookbook

第十章 模块与包

模块与包是任何大型程序的核心,就连 Python 安装程序本身也是一个包。

10.1 构建一个模块的层级包

代码组织成由很多分层模块构成的包。

解决方案

封装成包是很简单的。在文件系统上组织你的代码,并确保每个目录都定义了一个 __init__.py 文件。

graphics/
    __init__.py
    primitive/
        __init__.py
        line.py
        fill.py
        text.py
    formats/
        __init__.py
        png.py
        jpg.py

执行各种 import 语句,如下:

import graphics.primitive.line
from graphics.primitive import line
import graphics.formats.jpg as jpg

定义模块的层次结构就像在文件系统上建立目录结构一样容易。文件 __init__.py 的目的是要包含不同运行级别的包的可选的初始化代码。如果你执行了语句 import graphics, 文件 graphics/__init__.py 将被导入,建立 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 graphics.formats.jpg 以及 import graphics.formats.png

__init__.py 的其他常用用法包括将多个文件合并到一个逻辑命名空间。

敏锐的程序员会发现,即使没有 __init__.py 文件存在,python 仍然会导入包。如果你没有定义 __init__.py 时,实际上创建了一个所谓的“命名空间包”。如果你着手创建一个新的包的话,包含一个 __init__.py 文件吧。

__init__.py 文件可以将文件夹变为一个 Python 模块,Python 中的每个模块中,都有 __init__.py 文件。

通常 __init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的 __init__.py 文件。这样我们可以在 __init__.py 文件中批量导入我们所需要的模块,而不再需要一个一个的导入。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Cheng

梦想不是浮躁,而是沉淀和积累。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值