我是 Python 注释(类型提示)的新手。我注意到
pyi
文件中的很多类定义都继承了
Generic[_T]
和
_T = TypeVar('_T')
我很困惑,这里的
_T
是什么意思?
from typing import Generic, TypeVar
_T = TypeVar('_T')
class Base(Generic[_T]): pass
在 Python 的类型提示上下文中,
_T = TypeVar('_T')
声明了一个类型变量。让我们来分解一下:
1. 类型变量 (Type Variables)
- 在 Python 的类型提示系统中,类型变量像“占位符”一样,表示可以是任何类型的变量。它们尤其在处理泛型类型时很有用。
-
TypeVar
是typing
模块中的一个函数,用于创建这些类型变量。
2.
_T = TypeVar('_T')
-
_T
是一个常见的命名约定,用于表示类型变量。它不是强制性的,但被广泛使用。 -
TypeVar('_T')
创建了一个名为_T
的类型变量。这个类型变量可以表示任何类型。
3.
Generic[_T]
-
Generic
是另一个来自typing
模块的工具,用于创建泛型类。泛型类是可以与多种类型一起工作的类。 -
Generic[_T]
意味着Base
类是一个泛型类,它接受一个类型参数,用_T
表示。
例子:
from typing import Generic, TypeVar
_T = TypeVar('_T')
class Base(Generic[_T]):
def __init__(self, value: _T):
self.value: _T = value
def get_value(self) -> _T:
return self.value
# 使用不同的类型实例化 Base 类
int_instance = Base(10) # _T 被推断为 int
str_instance = Base("hello") # _T 被推断为 str
在这个例子中:
-
Base
类是一个泛型类,它可以存储任何类型的值。 -
_T
确保value
属性和get_value
方法的返回类型与类的实例化时使用的类型一致。
总而言之,
_T = TypeVar('_T')
声明了一个类型变量,用于使你的类或函数更通用,能够处理多种类型。