- 学习测试开发的Day133,真棒!
- 学习时间为1H
- 第11天全天课下午视频2H05M-2H45M
包的概念
在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包是一个分层的文件目录结构,它定义了一个由模块及子包和子包下的子包等组成的Python的应用环境。
包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹被当作包使用时,文件夹中需要包含init.py文件,主要是为了避免将文件夹名当作普通的字符串。init.py的内容可以为空,一般用来进行包的某些初始化工作或者设置all值,all是在from package-name import*这语句使用的,表示全部导出定义过的模块。如果希望调用同一个package中的module,则直接import即可。

image.png
a.py
b=1
def add(a,b):
return a+b
class P:
pass
print("hello world!")
if __name__=="__main__":
print("hello world!")
b.py
import module
print(module.a.b)
执行:
PS D:\0grory\day11> python b.py
Traceback (most recent call last):
File "b.py", line 3, in <module>
print(module.a.b)
AttributeError: module 'module' has no attribute 'a'
PS D:\0grory\day11>
正确的引用方式b.py:
import module.a
print(module.a.b)
执行:
PS D:\0grory\day11> python b.py
hello world!
1
PS D:\0grory\day11>
init.py
办法1:
__all__=["a"]
b.py
from module import *
print(a.b)
执行:
PS D:\0grory\day11> python b.py
hello world!
1
PS D:\0grory\day11>
如果init.py里面是空的,执行就会报错了
init.py
办法2:
from . import a
执行:
PS D:\0grory\day11> python b.py
hello world!
1
PS D:\0grory\day11>
子目录

image.png
a.py
def add(a,b):
return a+b

image.png
b.py
def multiple(a,b):
return a*b
D:\0grory\day11\b.py
import gloryroad.a
import gloryroad.submodule.b
print(gloryroad.a.add(1,2))
print(gloryroad.submodule.b.multiple(2,10))
执行结果:
PS D:\0grory\day11> python b.py
3
20
PS D:\0grory\day11>