【发布时间】:2021-03-05 13:32:37
【问题描述】:
我已经阅读了Can someone explain __all__ in Python? 并且我知道它只影响from ... import * 语句,但我无法弄清楚一个真正的用例。当我可以简单地避免在 __init__ 命名空间中导入这些名称时,为什么还要在 __all__ (干!)中重复导出的名称?
例子:
mypackage/__init__.py
from a import A
mypackage/a.py
A = "A"
A1 = "A1"
mypackage/b.py
B = "B"
然后在python中:
>>> from mypackage import *
>>> A
'A'
>>>
>>> A1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'A1' is not defined
>>> b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
如您所见,A 在命名空间中,但 A1 和 b 不在。为什么我必须定义__all__ = ["A"]?
【问题讨论】: