__all__
变量简介__all__
变量Python 语言中的 __all__
变量 是一个 列表 数据容器 , 用于控制 本应用 导入的 模块 中 可以使用 导入模块 的哪些 变量 / 函数 / 类 ;
Python 模块 被 应用导入时 , 系统会检查该模块是否定义了 __all__
变量 :
__all__
变量 , 那么导入 该 __all__
变量 列表 元素 对应的 变量 / 函数 / 类 功能 ;__all__
变量 , 那么导入该模块中所有功能 ;__all__
变量用法在 模块 代码的 最上部定义 __all__
变量 , 为其赋值一个 元素类型为 字符串类型 的 列表容器变量 ;
当使用
import module_name
from module_name import *
导入整个模块时 , 就会只导入 该 __all__
变量 列表 元素 对应的 变量 / 函数 / 类 功能 ;
使用
import module_name
导入整个模块 , 在执行阶段报错 , 如 :
Unresolved reference 'minus'
使用
from module_name import *
导入整个模块 , 在编译阶段直接报错 , 无法执行 ;
Traceback (most recent call last):
File "D:\002_Project\011_Python\HelloPython\Hello.py", line 11, in <module>
num2 = my_module.miuns(2, 3)
AttributeError: module 'my_module' has no attribute 'miuns'
如果使用
from my_module import minus
导入没有定义在 __all__
变量 中的函数 , 则在编译阶段会报错 ;
在执行时 , 也会报错 NameError: name 'miuns' is not defined
;
__all__
变量在下面的 Python 模块代码中 , 定义 __all__
变量 , 为其赋值 ['add']
列表容器变量 ;
在该 Python 模块中 , 定义了两个函数 , add 函数 和 minus 函数 , 这两个功能可以设置到 __all__
变量的 列表容器 中 ;
代码示例 :
__all__ = ['add']
def add(a, b):
print("调用 my_module 模块中的 add 功能")
return a + b
def minus(a, b):
print("调用 my_module 模块中的 minus 功能")
return a - b
if __name__ == '__main__':
print(add(3, 4))
print(minus(3, 4))
使用
from my_module import *
导入上述 定义了
__all__ = ['add']
变量的 Python 模块 , 发现只能访问 add 函数 , 不能访问 minus 函数 ;
如果强行访问 minus 函数 , 在编译阶段 , 会报出
Unresolved reference 'minus'
错误信息 ;
代码示例 :
"""
自定义模块 代码示例
"""
# 导入自定义模块
from my_module import *
num = add(2, 3)
print(num)
# num2 = miuns(2, 3)
执行结果 :
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
调用 my_module 模块中的 add 功能
5
Process finished with exit code 0
完整代码 :
"""
自定义模块 代码示例
"""
# 导入自定义模块
import my_module
num = my_module.add(2, 3)
print(num)
num2 = my_module.miuns(2, 3)
print(num2)
执行结果 :
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
Traceback (most recent call last):
File "D:\002_Project\011_Python\HelloPython\Hello.py", line 11, in <module>
num2 = my_module.miuns(2, 3)
AttributeError: module 'my_module' has no attribute 'miuns'
调用 my_module 模块中的 add 功能
5
Process finished with exit code 1
在下图的代码中 , 可以看到
num2 = my_module.miuns(2, 3)
代码在编译阶段 , 没有报错 , 但是在执行阶段 , 报错了 ;
代码示例 :
"""
自定义模块 代码示例
"""
# 导入自定义模块
from my_module import minus
from my_module import add
num = add(2, 3)
print(num)
num2 = miuns(2, 3)
print(num2)
上述代码在编译时报错 , 程序无法完成编译 ;
强行运行上述代码 , 会报如下错误 :
D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Hello.py
调用 my_module 模块中的 add 功能
5
Traceback (most recent call last):
File "D:\002_Project\011_Python\HelloPython\Hello.py", line 12, in <module>
num2 = miuns(2, 3)
NameError: name 'miuns' is not defined
Process finished with exit code 1