Python类中的`__all__`的含义是什么?

18

我知道在模块范围内使用 __all__,但是我遇到了在类内部使用 __all__ 的情况。例如在Python标准库中:

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

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

__all__ 在这个上下文中的作用是什么?

1个回答

12

typing 模块对现有模块(如 re)进行了一些不寻常的修补。基本上,内置模块 re 被替换成使用定制元类定义的这个类 re ,该元类会截获底层对象上的属性查找。对于这个类来说,__all__ 实际上没有任何特殊含义(它只是另一个类属性),但它有效地成为 re 模块的 __all__ 属性。正是元类的 __getattribute__ 定义实现了这一点。


6
它实际上并没有替换标准的re模块。您可能会被后续的sys.modules[re.__name__] = re所困惑,但这是设置了sys.modules['typing.re'],而不是sys.modules['re']。实际的re模块完全不受影响。 - user2357112

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接