Python __all__ 用法

2018-05-23  本文已影响15人  Paycation

在读 Django 源码时发现了这个 __all__:
https://github.com/django/django/blob/master/django/http/__init__.py

__all__ 是一个 list,里面装着字符串形式的变量名。
举个例子来看它的用法:
在同一目录下的两个 .py 文件,一个是 foo.py,一个是 bar.py。

# foo.py
a = 5
b = 3

我们运行 bar.py

# bar.py
from foo import *
print(a)
print(b)
输出:
5
3

现在改写一下 foo.py

# foo.py
a = 5
b = 3
__all__ = ['a']

再次运行 bar.py 则会报错,因为 b 无法被导出了。
NameError: name 'b' is not defined
但是这不是绝对的,因为 __all__ 只能限制 from module import *这种形式,因此可以加一行:

from foo import b

这样就不会报错了。

在 python 的世界里,没有真正的私有对象。
all 仅对 from ... import * 起作用。

上一篇 下一篇

猜你喜欢

热点阅读