上一篇:怎样使用自定义模块? | 手把手教你入门Python之四十九
下一篇:初识面向对象 | 手把手教你入门Python之五十一
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
包的使用
一个模块就是一个 py 文件,在 Python 里为了对模块分类管理,就需要划分不同的文件夹。多个有联系的模块可以将其放到同一个文件夹下,为了称呼方便,一般把 Python 里的一个代码文件夹称为一个包。
导入包的方式
现有以下包newmsg ,包里有两个模块,分别是sendmsg.py 、recvmsg.py 文件。在包的上级文件夹里,有一个test.py 文件,目标是在test.py 文件里引入newmsg 的两个模块。
目录结构如下图所示:
sendmsg.py文件里的内容如下:
def send_msg():
print('------sendmsg方法被调用了-------')
recvmsg.py文件里的内容如下:
def recv_msg():
print('-----recvmsg方法被调用了--------')
可以使用以下几种方式来导入模块,使用模块里的方法。
1>. 直接使用包名.模块名导入指定的模块。
2>. 使用from xxx import xxx
方式导入指定模块。
3>. 使用__init__.py
⽂文件,导入包里的指定模块。
可以在newmsg
里创建__init__.py
文件,在该文件里导入指定的内容。
在__init__.py
文件里编写代码:
from . import sendmsg # 导入指定的模块 . 代表的是当前文件夹
test.py文件里的代码
import newmsg # 导入时,只需要输入包名即可。在包名的__init__.py文件里,导入了指定模块
newmsg.sendmsg.sendm_msg() # 可以直接调用对应的方法
# newmsg.recvmsg.recv_msg() 不可以使用 recvmsg 模块,因为 __init__.py文件里没有导入这个模块
4.> 使⽤用__init__.py
文件,结合__all__
属性,导入包里的所有模块。
在newmsg
包里的__init__.py
文件里编写代码:
__all__ = ["sendmsg","recvmsg"] # 指定导入的内容
test.py文件代码:
from newmsg import * # 将newmsg里的__inint__.py文件里,__all__属性对应的所有模块都导入
sendmsg.sendmsg()
recvmsg.recvmsg()
总结
- 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为
__init__.py
文件,那么这个文件夹就称之为包。 - 有效避免模块名称冲突问题,让应用组织结构更加清晰
__init__.py
文件有什么用
__init__.py
控制着包的导入行为。__init__.py
为空仅仅是把这个包导入,不会导入包中的模块。可以在__init__.py
文件中编写内容。
newmsg/__init__.py
文件:
print('hello world')
别的模块在引入这个包的时候,会自动调用这段代码。
__all__
在__init__.py
文件中,定义一个__all__
变量,它控制着 from 包名 import *
时导入的模块。newmsg/__init__.py
文件:
__all__ = ['sendmsg','recvmsg']