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

psa*_*rka 0 python

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

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

__all__ = [shovel, bucket]
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jos*_*Lee 5

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
Run Code Online (Sandbox Code Playgroud)