给出:
from typing import TypeVar, Generic, Sequence
T = TypeVar("T")
class A(Generic[T]):
pass
class B(A[Sequence[T]], Generic[T]):
pass
b: B[int] = B()
正如预期的那样,reveal_type(b)
是 B[int]
。有没有办法让reveal_type
来告诉我A[Sequence[int]]
?
在这个简单的示例中,这没有用,但在这种情况下,我正在调试知道如何在给定参数化子类型的情况下参数化超类型,而无需手动连接这些点(并且可能与
mypy
推断的内容相矛盾)会澄清事情很多。
你可以写一个助手:
def as_a(a: A[T]) -> A[T]:
return a
reveal_type(as_a(b))
在 mypy 游乐场上,这揭示了
main.A[typing.Sequence*[builtins.int*]]
。 (显然星号标记在类型变量替换期间推断的类型。)