You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类内部__all__的作用是什么?(附标准库示例)

类内部__all__的作用

在类内部定义__all__并非Python原生语法规定的功能,不会像模块级__all__那样直接控制from ... import *的导入行为,但它是类设计者与相关工具、元类之间的约定标记,用来实现特定自定义逻辑。

以你提到的typing模块中的re类为例:

class re(metaclass=_DeprecatedType):
    """Wrapper namespace for re type aliases."""

    __all__ = ['Pattern', 'Match']
    Pattern = Pattern
    Match = Match

这里的__all__核心作用是配合自定义元类_DeprecatedType工作:

  • 这个re类是一个废弃的包装类,用于兼容旧代码中from typing.re import Pattern这类写法
  • __all__明确指定了该类对外暴露的“公开成员”列表,元类_DeprecatedType会基于这个列表,对访问这些成员的行为触发废弃警告(比如提示用户直接从re模块导入这些类型别名)
  • 未被列入__all__的成员,不会被元类的废弃逻辑处理(该类也没有其他成员)

除此之外,类内部的__all__还可能被以下场景利用:

  • 文档生成工具:读取__all__自动提取类的公开API,生成更精准的文档
  • 静态检查工具:识别类的公开成员,帮助开发者避免访问非公开属性
  • 自定义导入逻辑:某些框架会通过读取__all__实现类级别的“按需导入”或权限控制

总结来说,类里的__all__本质是约定式标记,本身没有原生语法层面的作用,其功能完全依赖于读取它的元类、工具或框架逻辑。

内容的提问来源于stack exchange,提问作者maxbachmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:01:09