Python 学习

python 中 __all__ 的含义与用法

2018-12-17  本文已影响9人  bianruifeng

无论是在.py文件中,或者在包package中的__init__.py文件中都是
公开声明了暴露的接口方法
__all__ = ['Method1','Method2']
但是上述方法,仅对模糊导入时起到作用。如:from xxx import * 就只会导入 __all__ 列出的成员(代码中不推荐这种写法,但是懒啊),如果__all__ 定义有误,列出的成员不存在,还会明确地抛出异常,而不是默默忽略。

当使用路径精确导入的时候,声明了__all__ 的.py或者包中的方法,同样有效。

因为Python 没有语言原生的可见性控制,不像Java中有public,private,所以需要靠大家自觉遵守在一套约定下工作。比如下划线开头的应该对外部不可见。同样,all 也是对于模块公开接口的一种约定,比起下划线,all 提供了暴露接口用的“白名单”。一些不以下划线开头的变量(比如从其他地方 import 到当前模块的成员)可以同样被排除出去。

当然这种声明还有一个好处,就是“骗”过一些代码检查工具,报错出现导入而未使用的警告⚠️。

上一篇 下一篇

猜你喜欢

热点阅读