山地人

Python 包

山地人
山地人
2021-07-02

通过这篇教程的学习,你将会学到如下技能:

  1. Python的包(Package)是什么?
  2. 包(Package)的价值
  3. 如何导入包(Package)中的模块
  4. 如何创建自己的包(Package)

Python的包(Package)

前面,我们已经学习过函数模块他们都是做各种封装,函数把代码封装成一个功能,模块又把相关的功能放如同一个文件,而包则是把相关联的模块组织在一起。这和我们用的电脑里的文件管理器相同,包就好比是文件夹,模块就是文件夹里的文件,函数则好比是文件里的一段段的内容。

包(Package)的价值

了解了包是什么,你应该也就知道了包的价值,帮助我们更好的组织和维护代码。当我们的应用变得越来越大,我们代码里的模块越来越多,使用包来管理各个模块的需求就会变得越来越重要。之前说了包好比文件夹,文件夹是可以放置子文件夹的,包也支持子包。

包和文件夹

包在创建和管理的时候,表现上就是使用的文件夹的方式来进行管理的,但一个文件夹要能被Python识别成包,还是有一个前提条件的。 这个文件夹里必须要有一个__init__.py的文件,这个文件的内容可以是空的,这样Python才会认为这个文件所在的文件夹是一个Python包。

导入包(Package)中的模块

要使用包中的模块,方法也很简单,包导入的方式和模块的导入是一致的,只需要把对应的包路径(也就是文件夹路径)使用.号连接导入

import App.Shop.shopcart

然后我们就可以使用shopcart模块里的功能了,只不过使用的时候需要写上一长串包名。

App.Shop.shopcart.add(product)

导入包中的具体模块

如果觉得上面的导入方式,在书写的时候不太方便,你也可以导入包中的指定模块,这样在使用这些指定模块时就不用写长长的包名了。

from App.Shop import shopcart

这样导入后,你就可以像下面这样调用shopcart中的功能:

shopcart.add(product)

导入包中模块中的具体功能

甚至,你还可以导入包中指定模块中的指定功能

from App.Shop.shopcart import add

这样导入后,你就可以像下面这样调用add方法了:

add(product)

所以这样看下来,包的导入和模块的导入是一致的,另外模块导入知道的那些重命名名称,导入全部的功能,在包导入中都是可以支持的,这里不再赘述。

创建自己的包(Package)

你可以在你的项目目录下创建多个包,比如你要创建一个App的包,那就新建一个App的文件夹,然后在这个文件夹里新建一个__init__.py空文件。

然后在这个App包中再创建Shop包,方法和App的创建过程一样,把这个Shop文件夹放到App文件夹下,这样以此创建出所有你要的包。

最后在不同的包层级下,添加模块文件。

这样你就学会了使用包管理你的项目了。

下面我们看个具体的例子

启动终端,运行程序,观察运行结果。

至此,本篇教程也到了该和你说再见的时候了,我们下期再见。

学完本篇互动教程,如果你觉得体验不错,可以把网页链接发送给你的小伙伴,让他/她也来感受一下。当然,你也可以继续看看网站上其他的的互动教程,希望`idev365`能够给你带来收获。

学习教程的过程中碰到了问题,或者对idev365有什么改进意见和想法,欢迎加入idev365微信内测群,和山地人交流你的想法。