我发现自己在__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__
应该是字符串列表有什么理由吗?或者对象也可以吗?
答案 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