美文网首页
python __all__ 含义

python __all__ 含义

作者: tafanfly | 来源:发表于2018-07-02 16:17 被阅读0次

1. 背景

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

2. 含义

  • 约定公开接口 : 可以清晰明了的知道该文件暴露的接口, 约定成俗的调用该接口。
  • 限制该行为from XXX import * : code当中不建议使用 from xxx import * 的写法的,但线下调试的时候经常用到。如果模块中没有定义 __all__,执行 from XXX import * 的时候会将模块中非下划线开头的成员都导入当前命名空间中,这样就有可能弄脏当前命名空间, 调试容易产生问题。如果显式声明了 __all__,import * 就只会导入 __all__ 列出的成员。但它只对import *起作用,对from XXX import XXX不起作用

3. 用例

被测文件test.py

__all__ = ['a',
           'b',
           'run',]

a = 'aaa'
b = 'bbb'
c = 'ccc'

def run():
    print 'Run the function.'

测试结果

  • 只能导入__all__声明的变量或函数
  • from test import c 无效

test 1:

In [1]: from test import *

In [2]: print a
aaa

In [3]: print b
bbb

In [4]: run
Out[4]: <function test.run>

In [5]: run()
Run the function.

In [6]: print c
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-1b1d2b33e8c2> in <module>()
----> 1 print c

NameError: name 'c' is not defined

test 2:

In [7]: from test import c

In [8]: print c
ccc

注意

  • __all__ 是 list 类型, 不要写表达式
  • 按照 PEP8 建议的风格,__all__ 应该写在所有 import 语句下面,和函数、常量等模块成员定义的上面
  • 正式代码中尽量不要使用 from XXX import *

相关文章

  • python __all__ 含义

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

  • python 中 __all__ 的含义与用法

    无论是在.py文件中,或者在包package中的__init__.py文件中都是公开声明了暴露的接口方法__all...

  • [转载]python之__all__

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

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

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

  • 阅读bk_monitor

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

  • python里的__init__.py的作用

    1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代...

  • Python中的模块与包

    目标 了解模块 导入模块 制作模块 __all__ 包的使用方法 一. 模块 Python 模块(Module),...

  • Python __all__ 用法

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

  • Python 学习笔记

    python 中 __all__变量: 它是一个string元素组成的list变量,定义了当你使用from imp...

  • Python 高级用法

    python 中 __all__变量: 它是一个string元素组成的list变量,定义了当你使用from im...

网友评论

      本文标题:python __all__ 含义

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