python实现控制模块可以导出的内容

 更新时间:2025年09月12日 08:54:45   作者:无风听海  
Python模块通过__all__列表控制import*导出内容,使用_前缀隐藏内部函数,__magic__为特殊符号,推荐明确API并合理使用命名空间

在 Python 中,我们可以通过在模块中定义 __all__ 列表,控制该模块通过 from module import * 导出的内容

1. 使用__all__控制导出

# 文件:my_module.py

__all__ = ['func1', 'MyClass']  # 只允许导出这些

def func1():
    pass

def func2():
    pass  # 不会被 * 导入

class MyClass:
    pass

然后在其他地方:

from my_module import *

func1()      # ✅ 可以使用
MyClass()    # ✅ 可以使用
func2()      # ❌ NameError: name 'func2' is not defined

说明:

  • __all__ 是一个字符串列表,定义了从这个模块使用 from xxx import * 时,能导入的名称。
  • import my_modulefrom my_module import func2 没有影响,它们仍然可以访问不在 __all__ 中的成员。

2. 手动控制命名空间

如果你不想别人通过 from my_module import * 看到你内部函数,可以:

def _internal_helper():
    # 这是内部函数,不打算对外暴露
    ...

def public_func():
    ...

在 Python 中,以单下划线开头的变量或函数名(如 _internal_helper)默认不会被 import * 导入。

3. 私有 vs 公有符号建议

名称形式是否默认导出(被 * 看到)用途建议
func1✅ 是公共 API
_helper_func❌ 否模块内部工具函数
__magic__❌ Python 保留特殊用途
__all__✅ 手动控制导出白名单

示例:更完整的模块设计

# mymath.py

__all__ = ['add', 'multiply']

def add(x, y):
    return x + y

def multiply(x, y):
    return x * y

def _debug_log(x):
    print(f"Debug: {x}")

用户代码:

from mymath import *

add(2, 3)       # ✅
multiply(2, 3)  # ✅
_debug_log(1)   # ❌ NameError

总结

控制方式效果推荐使用场景
__all__ = [...]限制 import * 能导出的内容公开 API 明确时
前缀 _默认隐藏,不导出工具函数、私有变量
import xxx无限制,访问完整模块命名空间推荐日常用法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Pytorch卷积层手动初始化权值的实例

    Pytorch卷积层手动初始化权值的实例

    今天小编就为大家分享一篇Pytorch卷积层手动初始化权值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python包管理工具pip的升级指南

    Python包管理工具pip的升级指南

    本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方法及其适用场景,讨论常见问题解决方案,文章包含详细的代码示例、操作步骤和原理分析,需要的朋友可以参考下
    2025-07-07
  • Python Locust搭建高性能负载测试工具

    Python Locust搭建高性能负载测试工具

    Locust 是一个开源的、基于 Python 的负载测试工具,它允许开发者使用 Python 代码来定义用户行为,从而模拟真实用户对系统进行压力测试,所以本文就来使用Locust搭建一个高性能负载测试工具吧
    2025-06-06
  • Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例

    这篇文章主要介绍了Python基于socket模块实现UDP通信功能,结合实例形式分析了Python使用socket模块实现IPV4协议下的UDP通信客户端与服务器端相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • 在Python IDLE 下调用anaconda中的库教程

    在Python IDLE 下调用anaconda中的库教程

    这篇文章主要介绍了在Python IDLE 下调用anaconda中的库教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • PyMongo 查询数据的实现

    PyMongo 查询数据的实现

    本文主要介绍了PyMongo 查询数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • Python 逐行分割大txt文件的方法

    Python 逐行分割大txt文件的方法

    本文通过代码给大家介绍了Python 逐行分割大txt文件的方法,在文中给大家提到了Python从txt文件中逐行读取数据的方法,需要的朋友参考下吧
    2017-10-10
  • python分析nignx访问日志脚本分享

    python分析nignx访问日志脚本分享

    这篇文章主要介绍了python分析nignx访问日志脚本分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-02-02
  • python中查看变量内存地址的方法

    python中查看变量内存地址的方法

    这篇文章主要介绍了python中查看变量内存地址的方法,涉及Python中id使用技巧,需要的朋友可以参考下
    2015-05-05
  • python 音频和视频合并自动裁剪

    python 音频和视频合并自动裁剪

    本文主要介绍了python 音频和视频合并自动裁剪,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06

最新评论