python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python控制模块可以导出的内容

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

作者:无风听海

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

说明:

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

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

您可能感兴趣的文章:
阅读全文