【从零学习python 】38.Python包的使用及导入方式

2024-02-29 17:14:39 浏览数 (2)

包的使用

一个模块就是一个 py 文件,在 Python 里为了对模块分类管理,就需要划分不同的文件夹。多个有联系的模块可以将其放到同一个文件夹下,为了称呼方便,一般把 Python 里的一个代码文件夹称为一个包。

1. 导入包的方式

现有以下包newmsg,包里由两个模块,分别是sendmsg.py、recvmsg.py文件。在包的上级文件夹里,有一个test.py文件,目标是在test.py文件里引入newmsg的两个模块。

目录结构如下图所示:

代码语言:javascript复制
- newmsg/
  - __init__.py
  - sendmsg.py
  - recvmsg.py
- test.py

sendmsg.py文件里的内容如下:

代码语言:javascript复制
def send_msg():
  print('------sendmsg方法被调用了-------')

recvmsg.py文件里的内容如下:

代码语言:javascript复制
def recv_msg():
  print('-----recvmsg方法被调用了--------')

可以使用以下几种方式来导入模块,使用模块里的方法。

  1. 直接使用包名.模块模块名导入指定的模块。
代码语言:javascript复制
import newmsg.sendmsg
  1. 使用from xxx import xxx 方式导入指定模块。
代码语言:javascript复制
from newmsg import sendmsg
  1. 使用__init__.py文件,导入包里的指定模块。

可以在newmsg里创建__init__.py文件,在该文件里导入指定的内容。

在__init__.py文件里编写代码:

代码语言:javascript复制
from . import sendmsg  # 导入指定的模块    . 代表的是当前文件夹

test.py文件里的代码:

代码语言:javascript复制
import newmsg
newmsg.sendmsg.send_msg()  # 可以直接调用对应的方法
# newmsg.recvmsg.recv_msg()   不可以使用 recvmsg 模块,因为 __init__.py文件里没有导入这个模块
  1. 使用__init__.py文件,结合__all__属性,导入包里的所有模块。

在newmsg包里的__init__.py文件里编写代码:

代码语言:javascript复制
__all__ = ["sendmsg","recvmsg"]  # 指定导入的内容

test.py文件代码:

代码语言:javascript复制
from newmsg import *  # 将newmsg里的__inint__.py文件里,__all__属性对应的所有模块都导入
sendmsg.send_msg()
recvmsg.recv_msg()

总结

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包,有效避免模块名称冲突问题,让应用组织结构更加清晰。

2. init.py文件有什么用

init.py 控制着包的导入行为。init.py为空仅仅是把这个包导入,不会导入包中的模块。可以在__init__.py文件中编写内容。

newmsg/init.py文件:

代码语言:javascript复制
print('hello world')

别的模块在引入这个包的时候,会自动调用这段代码。

3. all

在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import * 时导入的模块。

newmsg/init.py文件:

代码语言:javascript复制
__all__ = ['sendmsg','recvmsg']

注意事项

在自定义模块时,需要注意一点,自定义模块名不要和系统的模块名重名,否则会出现问题!

0 人点赞