Python 3 中的类型提示!😊
在 Python 3 中,TypeVar
是一种创建类型变量的方式,类型变量是一种特殊的类型,可以用作特定类型的占位符。您提到的语法,TypeVar("A", bound="<ClassName>")
,用于创建一个名为 A
的类型变量,该变量被限定为特定的类 ClassName
。
以下是语法的解释:
TypeVar
:这是来自 typing
模块的一个函数,用于创建类型变量。"A"
:这是类型变量的名称。您可以选择任何有效的 Python 标识符作为名称。bound="<ClassName>"
:这指定了类型变量的边界。在这种情况下,A
被限定为类 ClassName
,这意味着 A
只能被实例化为 ClassName
的子类。
换言之,TypeVar("A", bound="<ClassName>")
意味着 A
是一个只能被替换为 ClassName
子类的类型变量。
以下是一个示例,以说明这一点:
from typing import TypeVar
class 动物: pass
class 狗(动物): pass
class 猫(动物): pass
A = TypeVar("A", bound="动物")
def 处理动物(a: A) -> A:
return a
我的狗: 狗 = 狗()
结果: 狗 = 处理动物(我的狗) # OK!
我的猫: 猫 = 猫()
结果: 猫 = 处理动物(我的猫) # OK!
我的整数: int = 5
结果: int = 处理动物(我的整数) # 错误!int 不是动物的子类
在这个示例中,A
是一个被限定为 动物
的类型变量。处理动物
函数接受一个类型为 A
的参数,并返回同类型的对象。因为 狗
和 猫
是 动物
的子类,所以我们可以将这些类的实例传递给 处理动物
函数,而类型检查器将不会报错。
但是,如果我们尝试将一个 int
对象传递给函数,类型检查器将抛出错误,因为 int
不是 动物
的子类。
通过使用 TypeVar
与边界,我们可以创建更加灵活和可重用的函数,这些函数可以与一系列相关的类型一起工作,同时仍然维护类型安全。