__all__

作者: 冯斯特罗 | 来源:发表于2017-05-04 10:17 被阅读14次
不知道应该叫什么的标题

Python对语法的约束性非常弱,大部分情况下,都是靠约定来做约束。比如下划线开头的应该对外部不可见。同样,all 也是对于模块公开接口的一种约定,比起下划线,all 提供了暴露接口用的”白名单“。一些不以下划线开头的变量(比如从其他地方 import 到当前模块的成员)可以同样被排除出去。
例如标准库中的_abcoll.py

__all__ = ["Hashable", "Iterable", "Iterator",
           "Sized", "Container", "Callable",
           "Set", "MutableSet",
           "Mapping", "MutableMapping",
           "MappingView", "KeysView", "ItemsView", "ValuesView",
           "Sequence", "MutableSequence",
           ]

作用是:

  • 控制 from xxx import * 的行为
  • 为 lint 工具提供辅助
定义 all 需要注意的地方
  • 如上所述,all 应该是 list 类型的
  • 不应该动态生成 all,比如使用列表解析式。all 的作用就是定义公开接口,如果不以字面量的形式显式写出来,就失去意义了。
  • 即使有了 all 也不应该在非临时代码中使用 from xxx import * 语法
  • 按照 PEP8 建议的风格,all 应该写在所有 import 语句下面,和函数、常量等模块成员定义的上面。

相关文章

  • python的学习小结

    __all__的用法 常常看源码发现__init__.py文件中有__all__,关于它的用法举个栗子: __al...

  • day23模块

    模块:导入的两种方式 不加__all__的情况: 加__all__的情况: ·总结:如果一个文件中有__all__...

  • [转载]python之__all__

    [转载]使用__all__暴露接口 在Python中我们可以使用__all__暴露出模块级别的接口: 这样在其他模...

  • __all__

    不知道应该叫什么的标题 Python对语法的约束性非常弱,大部分情况下,都是靠约定来做约束。比如下划线开头的应该对...

  • python进阶-特殊变量和属性

    本文主要记录了python中一些特殊变量或者属性的说明,比如__all__等。 __all__ 先看代码,假设有两...

  • 阅读bk_monitor

    Python标准模块--functools __all__的作用 https://www.cnblogs.com/...

  • 关于导包和模块

    Tips使用from XX import * ,如果被导入文件中有__all__=['one','two'] ,这...

  • python模块化

    __init__.py和__all__介绍: http://www.bubuko.com/infodetail-6...

  • Python __all__ 用法

    在读 Django 源码时发现了这个 __all__:https://github.com/django/djan...

  • python __all__ 含义

    1. 背景 最近看了一些代码,发现有些python文件在import 下面声明 __all__,查阅资料了解其含义...

网友评论

      本文标题:__all__

      本文链接:https://www.haomeiwen.com/subject/nhertxtx.html