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

说明

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

posted @   Allen_Hao  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示