如何强制mypy的reveal_type显示超类型?

问题描述 投票:0回答:1

给出

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
推断的内容相矛盾)会澄清事情很多。

python python-typing mypy
1个回答
3
投票

你可以写一个助手:

def as_a(a: A[T]) -> A[T]:
    return a

reveal_type(as_a(b))

在 mypy 游乐场上,这揭示了

main.A[typing.Sequence*[builtins.int*]]
。 (显然星号标记在类型变量替换期间推断的类型。)

© www.soinside.com 2019 - 2024. All rights reserved.