I have these two modules that form an import cycle:
# a.py
from collections import namedtuple
from b import f
N = namedtuple('N', 'a')
class X(N):
pass
# b.py
import a
def f(x: a.X) -> None:
reveal_type(x) # a.X
y = a.X(1)
reveal_type(y) # Tuple[Any, fallback=a.X]
The revealed types for two values with the same type a.X differ depending on how the type was constructed (see the comments above). The explanation is that when mypy processes the type annotation of f, is doesn't yet know that it is a named tuple type. The type of a.X(1) is determined later during type checking, and mypy then knows that it's a named tuple.
Not sure what's the best way to fix this. We could perhaps fix up named tuple types in the third pass of semantic analysis when this knowledge is available.
I have these two modules that form an import cycle:
The revealed types for two values with the same type
a.Xdiffer depending on how the type was constructed (see the comments above). The explanation is that when mypy processes the type annotation off, is doesn't yet know that it is a named tuple type. The type ofa.X(1)is determined later during type checking, and mypy then knows that it's a named tuple.Not sure what's the best way to fix this. We could perhaps fix up named tuple types in the third pass of semantic analysis when this knowledge is available.