以下是我的问题的最简示例:
[test/__init__.py]
from test.test1 import Test1
from test.test2 import Test2
[test/test1.py]
class Test1:
pass
[test/test2.py]
from test import Test1
class Test2:
pass
模块或 __init__.py 的 Mypy 输出:
test/test2.py:1: error: Module 'test' has no attribute 'Test1'
这段代码不仅适用于Python 2,也适用于Python 3。
test.test1
的SCC和一个名为test
和test.test2
的SCC。Mypy将首先处理第一个,然后它将了解Test1
并能够在处理__init__.py
和test2.py
文件时使用Test1
类类型提示。根据-v
输出,这正是发生的事情。我希望对于同一SCC中另一个文件使用的类型提示会有一些问题,但不是这个原因。为什么? - freopentest
模块的一部分,名称为test.Test1
,而不是test1
模块的一部分。 - freopentest
,否则mypy不会知道test.Test1
与test.test1.Test1
有任何关系。如果我没记错的话,这种关联是在后面的流程中建立的。 - Michael0x2a