包的使用
第一类:
? 执行文件 通过import导入包以及包内的功能
? 创建一个aaa的包,自行创建一个__init__
py文件
? 创建一个包会发生三件事儿:
? 1.将以XXX包内的__init__
py文件加载到内存中
? 2.创建一个以XXX命名的名称空间.
? 3.通过XXX . 的当时引用__init__
的所有的名字.
import aaa
# 如何在当前文件中,引用aaa包的bbb包?
1.在执行文件写入 import aaa
2. aaa的__init__ 里面写 from aaa import bbb
3.在执行文件 aaa.bbb
print(aaa.bbb)
如何在当前文件中,引用aaa包的bbb包的MB文件中的函数FUNC.
1.在执行文件写入 import aaa
2. 在aaa包的`__init__` 写上 from aaa import bbb (这样bbb包的__init__ 里面的所有的名字都能够被引用)
print(aaa.bbb.name)
3.在bbb包的`__init__` 协商from aaa.bbb import mb
aaa.bbb.mb.func3()
注意:
最开始的模块或者包名一定是内存,内置,sys.path中能找到的
直接import 是为了让我们会使用包里面的__init__
第二类:
from ... import ...
不用设置init文件
from aaa.bbb.m2 import func1
func1()
from aaa.bbb import m2
m2.func1()
from a.b.c import d.e.f
# c的. 的前面一定是包名
# import 的后面一定是名字,且不能再有点
错误示范:
from aaa.bbb.m2.func1 omport a
应为:
from aaa.bbb import m2
m2.func1()
相对导入和绝对导入
? 需求由来:无论对XX模块有任何操作,对于使用者来说不应该改变,极少的改变对其的调用
? 用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
from ..cmd import manage
manage.main()
绝对导入与相对导入
# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
# 优点: 执行文件与被导入的模块中都可以使用
# 缺点: 所有导入都是以sys.path为起始点,导入麻烦
# 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
# 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
# 优点: 导入更加简单
# 缺点: 只能在导入包中的模块时才能使用
#注意:
1. 相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内
2. attempted relative import beyond top-level package # 试图在顶级包之外使用相对导入是错误的,言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包
原文地址:https://www.cnblogs.com/lyoko1996/p/11133506.html
时间: 2024-11-09 06:28:42