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
相关产品推荐
相关产品推荐

