python中__all__
时间: 2023-07-03 08:21:34 浏览: 196
Python-init-py文件详解-源代码.zip
在 Python 中,`__all__` 是一个特殊变量,用于指定模块中哪些对象应该被导入。具体来说,`__all__` 是一个列表,包含了当前模块中所有公开的对象的名称,也就是说这些对象可以被其他模块通过 `from module import *` 的方式导入。
如果在一个模块中没有定义 `__all__`,那么默认情况下,所有以单下划线 `_` 开头的对象都不会被导入。而如果定义了 `__all__`,那么只有在 `__all__` 中列出的对象才会被导入。另外,如果 `__all__` 中列出的对象不存在,或者是以单下划线 `_` 开头的对象,则会导致 `ImportError` 异常。
下面是一个简单的示例,演示了如何使用 `__all__` 来控制模块中对象的导入:
```python
# demo.py
def func1():
pass
def func2():
pass
def _func3():
pass
__all__ = ['func1', 'func2']
# main.py
from demo import *
func1() # 正常运行
func2() # 正常运行
_func3() # NameError: name '_func3' is not defined
```
在上面的示例中,`demo.py` 中定义了三个函数,其中 `_func3()` 是以单下划线 `_` 开头的,表示这个函数是模块内部使用的,不应该被其他模块导入。`__all__` 变量定义了模块中公开的对象名称,只有 `func1` 和 `func2` 在其中,因此只有这两个函数可以被其他模块导入。在 `main.py` 中,使用 `from demo import *` 的方式导入了模块中的所有公开对象,可以看到 `_func3()` 无法被访问,因为它不在 `__all__` 中。
阅读全文