包的使用
一、遵循三个步骤
1、产生一个包的名称空间
2、执行包下的__init__.py,将产生的名字存放于包的名称空间中
3、在当前执行文件中拿到一个名字aaa,该名字指向的名称空间
print(aaa.x)#就是问,aaa下面__init__.py要一个名字x
print(aaa.y)
print(aaa.m1)#就是问aaa下面__init__.py要一个m1
注意一点是:在包内是没有执行文件的要调用功能要通过上面的方法。
如果我要在执行文件下找到c文件中的__init__.py
#在执行文件中
Import aaa
from aaa import bbb
print(aaa.bbb.ccc.x)
#在bbb文件同级的__init__.py中输入import
from aaa.bbb import ccc #这一点很重要
二、相对导入和绝对导入
刚才我们上面写的都是绝对导入,但是是绝对导入又一个弊端就是文件名字被写死了,万一要改,就瞬间爆炸。
所以,我们要有相对导入。
# from nb import m1,m2,m3
# # 绝对导入
# from nb.m1 import f1,f2
# from nb.m2 import f3,f4
# from nb.m3 import f5,f6
# from nb.p1.m4 import f7
# 相对导入
from .m1 import f1,f2
from .m2 import f3,f4
from .m3 import f5,f6
from .p1.m4 import f7
一个 . 代表着前一个文件,这里代表着前面的nb。
两个 .. 代表着前面两个文件。
但是要注意的一点是相对导入只能要在你要的文件下面才可以用。