__all__变量限制、明确导入范围

发布时间 2023-07-23 09:16:43作者: Allen_Hao

说明

__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__是一个用于控制模块导入行为的变量,通过指定其中的公共接口,可以限制导入的范围并明确模块的公共功能。