__all__可以是对象列表而不是字符串吗?

时间:2018-02-12 21:15:21

标签: python

我发现自己在__init__.py文件中使用了以下模式:

from tool.shed import shovel
from tool.shed import bucket

__all__ = [shovel, bucket]

这样的代码将是我尝试过的所有python版本,但似乎这是一个意外。我没有看到它提到__all__可以是对象列表(而不是字符串),并且在运行mypy时报告为错误:

Type of __all__ must be "Sequence[str]", not "List[object]"

__all__应该是字符串列表有什么理由吗?或者对象也可以吗?

1 个答案:

答案 0 :(得分:2)

这样做会打破from mymod import *。否则不会使用__all__

>>> from a import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1019, in _handle_fromlist
  File "<frozen importlib._bootstrap>", line 1014, in _handle_fromlist
TypeError: Item in a.__all__ must be str, not module