知识点:
-
import 模块名
一次导入模块中所有的属性和方法 -
from 模块名 import *
导入模块中__all__列表里面的所有对象内容
使用时不用加模块名。 -
from 模块名 import 对象1,对象2…
导入模块中的对象1,对象2…,不受__all__列表的限制,即使不在__all__列表,import 后面存在这个对象也可以输出
以下是测试文件(都在同一个包下):
目录结构
- package
a.py
b.py
c.py
源代码
b.py
BB = "这是b.py的属性BB"
CC = "这是b.py的属性CC"
c.py
A = 2
b = 4
hh = 'hhhh'
c = 5
def say():
print("这是c文件")
# 方法只用写属性名
__all__ = ['A', 'say', 'c']
a.py
print("以下测试案例学习说明,每一个测试例子以空行分开")
print("每次可以选择整个例子,并将注释取消即可运行")
print("============分割线=================")
# 例1
# 导入b 使用b.py 的属性
import b
# 可以使用模块b中所有的内容
print(b.BB)
print(b.CC)
# # 例2
# # 导入c 使用c.py 的属性
# import c
# print(c.A) # 输出2
# print(c.b) # 输出4
# print(c.c) # "这是c文件"
# print(c.say())
# # 例3
# # 导入c 使用c.py 的属性 使用方法: 不用写 模块名.
# from c import *
# print(A)
# print(b) # 在这里我没有把上面的例1 (import b) 注释 所以当c中存在与当前模块同名属性b 优先运行当前模块拥有的属性 输出了b 的模块的绝对路径 不存在同名时输出模块c中属性名为b的值
# # print(hh) # 没有__all__ 列表中 说明 from ... import ... 只能将存在__all__ 列表中的对象导入
# print(c)
# say()
# # 例4
# # 选择性导入
# from c import A, say, hh
# # 注意:这里的hh 是不在__all__列表里面的
# print(A)
# print(hh) # __all__列表中没有该对象 但还是可以输出
# say() # 方法 导入只写方法名