Python typing.TypeVar实例讲解

时间:2022-04-07
本文章向大家介绍Python typing.TypeVar实例讲解,主要分析其语法、参数、返回值和注意事项,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

用法:

class typing.TypeVar

类型变量。

用法:

T = TypeVar('T')  # Can be anything
A = TypeVar('A', str, bytes)  # Must be str or bytes

类型变量的存在主要是为了静态类型检查器的好处。它们用作泛型类型以及泛型函数定义的参数。有关泛型类型的更多信息,请参阅Generic。通用函数的工作方式如下:

def repeat(x: T, n: int) -> Sequence[T]:
    """Return a list containing n references to x."""
    return [x]*n

def longest(x: A, y: A) -> A:
    """Return the longest of two strings."""
    return x if len(x) >= len(y) else y

后一个示例的签名本质上是 (str, str) -> str(bytes, bytes) -> bytes 的重载。另请注意,如果参数是 str 的某个子类的实例,则返回类型仍然是普通的 str

在运行时,isinstance(x, T) 将引发 TypeError 。通常,isinstance()issubclass() 不应与类型一起使用。

类型变量可以通过传递标记为协变或逆变covariant=True或者contravariant=True.看PEP 484更多细节。默认情况下,类型变量是不变的。或者,类型变量可以使用指定上限bound=<type>.这意味着替换(显式或隐式)类型变量的实际类型必须是边界类型的子类,请参阅PEP 484.