说明
__all__
是一个用于控制模块导入行为的特殊变量。它是一个定义在模块顶部的列表,其中包含了模块中可以被导入的公共接口(函数、类、变量等)。
当使用from 模块名 import *
导入模块时,只有__all__
列表中的成员会被导入,其他成员将不可见。
使用__all__
的好处是可以限制导入的范围,避免不必要的命名冲突,并提供清晰的公共接口。
示例
math_operations.py:
1 ''' 2 当使用from math_operations import *导入模块时,只有add函数会被导入,而subtract函数将不可见。 3 ''' 4 5 6 def add(a, b): 7 return a + b 8 9 10 def subtract(a, b): 11 return a - b 12 13 14 __all__ = ['add']
string_operations.py:
def uppercase(s): return s.upper() def lowercase(s): return s.lower() # 通过在__all__中指定模块的公共函数,可以明确告诉其他开发者应该使用哪些接口。 __all__ = ['uppercase', 'lowercase']
test.py:
1 ''' 2 3 1. 限制导入的范围 4 2. 明确公共接口 5 ''' 6 7 from math_operations import * 8 from string_operations import * 9 import string_operations 10 11 a = 5 12 b = 3 13 # subtract(a, b) # 编译器报错 14 print(add(a, b)) # 8 15 16 # 查看可导入接口 17 print(string_operations.__all__) # ['uppercase', 'lowercase']
需要注意的是,__all__
列表只影响使用from 模块名 import *
形式导入的行为,对于使用import 模块名
或from 模块名 import 功能名
导入的方式没有影响。另外,__all__
并不是Python语言的强制规定,它只是一种约定俗成的写法,开发者可以选择是否使用。
总结起来,__all__
是一个用于控制模块导入行为的变量,通过指定其中的公共接口,可以限制导入的范围并明确模块的公共功能。