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无限制,访问完整模块命名空间推荐日常用法

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

相关文章

  • python读取excel文件的方法

    python读取excel文件的方法

    文章介绍了在Python中读取Excel文件的两种方法:使用pandas库和使用openpyxl库,pandas适合数据分析和处理,而openpyxl提供了更多的Excel文件操作功能,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Appium自动化测试实现H5页面元素定位

    Appium自动化测试实现H5页面元素定位

    本文主要介绍了Appium自动化测试实现H5页面元素定位,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python屏幕抓取和录制的详细代码示例

    Python屏幕抓取和录制的详细代码示例

    随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,这篇文章主要介绍了Python屏幕抓取和录制的相关资料,需要的朋友可以参考下
    2025-09-09
  • 用python给自己做一款小说阅读器过程详解

    用python给自己做一款小说阅读器过程详解

    这篇文章主要介绍了用python给自己做一款小说阅读器过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python实现提取给定网页内的所有链接

    Python实现提取给定网页内的所有链接

    这篇文章主要和大家分享一个实用的Python脚本,可以实现从给定的网页中检索所有链接,并将其保存为txt文件,需要的小伙伴可以收藏一下
    2023-05-05
  • Python 之 Json序列化嵌套类方式

    Python 之 Json序列化嵌套类方式

    今天小编就为大家分享一篇Python 之 Json序列化嵌套类方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python抽象类应用详情

    Python抽象类应用详情

    这篇文章主要介绍了Python抽象类应用详情,抽象类就是控制子类的方法的名称,要求子类必须按照父类的要求的实现指定的方法,且方法名要和父类保持一致,下文更多相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • 在pytorch中计算准确率,召回率和F1值的操作

    在pytorch中计算准确率,召回率和F1值的操作

    这篇文章主要介绍了在pytorch中计算准确率,召回率和F1值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python新手入门之编写一个自动诗歌生成器

    Python新手入门之编写一个自动诗歌生成器

    这篇文章主要为大家详细介绍了如何使用Python编写一个自动诗歌生成器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-05-05
  • pytorch实现特殊的Module--Sqeuential三种写法

    pytorch实现特殊的Module--Sqeuential三种写法

    今天小编就为大家分享一篇pytorch实现特殊的Module--Sqeuential三种写法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论