Python 类中 `__all__` 的含义

max*_*ann 18 python

我知道__all__at 模块范围的使用。然而我遇到了内部类的用法__all__。例如,这是在Python standardlib中完成的:

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

    __all__ = ['Pattern', 'Match']
    Pattern = Pattern
    Match = Match
Run Code Online (Sandbox Code Playgroud)

在此背景下取得了什么成果__all__

che*_*ner 12

typing模块做了一些非正统的事情来修补现有模块(例如re)。基本上,内置模块re被替换为re使用自定义元类定义的此类,该自定义元类拦截底层对象的属性查找。对于类__all__来说并没有任何特殊含义(它只是另一个类属性),但它实际上成为模块的属性。这是元类的定义实现了这一点。__all__re__getattribute__

  • 它实际上并没有取代标准的“​​re”模块。您可能对随后的 `sys.modules[re.__name__] = re` 感到困惑,但这是设置 `sys.modules['typing.re']`,而不是 `sys.modules['re']`。实际的“re”模块完全不受影响。 (6认同)