注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十八章: Python模块处理 > 18.3节:Python中的package

18.3节:Python中的package

薯条老师 2020-05-26 13:51:14 205441 0

编辑 收藏

教程引言:

系统地讲解计算机基础知识,Python的基础知识, 高级知识。关注微信公众号[薯条编程],领取该教程的PDF电子书:《Python零基础入门指南》。

18.3.1 理解package

package的中文意思为“包裹”,“包装盒”。 Python中的package,即通常所说的包结构,是一种包裹模块文件的目录结构。通俗地来进行解释,package是一个模块仓库。为理解包结构,我们先来看下18.1节中的程序目录结构:

D:\--── Python3-Learning
   ├──chapter18
   │   ├── main.py
   │   └── utils
   ├── calc_max.py

上文目录结构中的utils就是一个package。同样地,chapter18也是一个package。为什么Python需要引入package的概念?引入package是方便对模块文件进行组织和管理,例如将与项目配置相关的脚本文件,单独作为一个配置层的package, 将与业务逻辑相关的作为一个业务逻辑层的package。

18.3.2 package也是对象

在Python中,一切皆对象,可将package也理解为一种命名空间对象。Python中的类有一个特殊的__init__方法,用来对对象进行初始化。在package中可以添加一个__init__.py,在__init__.py对package进行初始化,为package定义属性和方法。
现在我们在utils目录下定义一个__init__.py,在__init__.py中定义package的属性和方法:
# __file__ = __init__.py
# __desc__ = 初始化package中的属性和方法 

# 定义一个PACKAGE_NAME属性,表示当前package的名称
PACKAGE_NAME = "utils"
通过import语句可以直接导出package的命名空间对象,导出命名空间对象以后,可以访问__init__.py中定义的属性和方法。现在我们进入windows命令行,切换到utils所在的目录,然后执行python进入交互模式:
D:\Python3-Learning\chapter18>python
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import utils
>>> utils.PACKAGE_NAME
'utils'

在交互模式中,先执行import导出package的命名空间,然后再直接访问utils命名空间中的PACKAGE_NAME属性。

Python3中的package也称为命名空间包,__init__.py不是必须的。

如需访问package下的模块,需要使用from来进行导出:
>>> from utils import calc_max
>>> calc_max.calc_max(1,2,3,4,5)
5

在交互模式中执行from utils import calc_max,从utils包中导出calc_max模块,再从calc_max模块中导出calc_max函数,来计算序列1,2,3,4,5中的最大值。

18.3.3 使用package组织项目结构

在企业开发中,通常使用三层结构来组织项目结构。三层架构是按照按项目的功能来划分的三层逻辑结构:表示层,业务逻辑层,数据访问层

表示层的功能是接收用户输入的数据,以及进行数据显示。业务逻辑层,对应于具体的业务规则,数据访问层则将数据的读写操作封装到一个package。

使用分层架构使得项目的逻辑结构变得清晰可读,分工明确,开发人员只需关注整个结构中的某一层,降低了维护成本。我们现在使用Python中的package来组织三层架构,使用package组织三层架构的主要形式:

└── main.py
└── uil
   ├──__init__.py
└── bll
   ├──__init__.py
└── dal
   ├──__init__.py

其中main.py是整个应用程序的入口,uil指的是数据表示层,bll指的是业务逻辑层,而dal代表数据访问层。三层结构并不是单纯将每个package进行命名,按这种逻辑形式进行项目的组织,程序员在实际的设计过程中,应遵循模块化设计原则,同时多考虑代码的复用性以及减少层与层之间的相互依赖。
减少模块间的依赖,保持高内聚,低耦合,是一种重要的设计理念。

18.3.4 知识要点

(1) Python中的package,通俗地来进行解释,即模块仓库。
(2) 在Python中一切皆对象,package也是一种对象。
(3) 引入package是方便对模块文件进行组织和管理,例如将与项目配置相关的脚本文件,单独作为一个配置层的package, 将与业务逻辑相关的作为一个业务逻辑层的package。

18.3.5 高薪就业班

(1) Python后端工程师高薪就业班,月薪8K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪8K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录