如何检查类型是否属于TypeVar的约束类型集合
如何检查类型是否属于TypeVar的约束类型集合
我完全懂你的需求——你定义了带类型约束的TypeVar,想判断某个变量的实际类型是不是在这个TypeVar限定的类型集合里对吧?其实不用找什么复杂的方法,TypeVar对象本身就自带了一个专门存储约束的属性,咱们直接用它就能搞定。
你原来写的print(type(num) in number)之所以行不通,是因为number是一个TypeVar实例,并不是可迭代的类型集合,直接用in判断会报错。正确的做法是访问它的__constraints__属性,这个属性会返回你定义TypeVar时传入的所有约束类型组成的元组。
咱们直接修改你的代码来演示:
from typing import TypeVar number = TypeVar("number", int, float) num: number = 3.14 # 正确的判断方式 print(type(num) in number.__constraints__) # 输出 True # 再测试一个int类型的变量 num2: number = 5 print(type(num2) in number.__constraints__) # 输出 True # 测试一个不在约束里的类型,比如字符串 str_var = "test" print(type(str_var) in number.__constraints__) # 输出 False
简单解释一下:当你用TypeVar("number", int, float)这种方式定义带约束的TypeVar时,number.__constraints__就会等于(int, float),所以直接用type(num)和这个元组做成员判断就可以了。
如果你的TypeVar是用bound参数来指定约束的(比如TypeVar("number", bound=Real)),那__constraints__属性会是一个只包含bound类型的元组,同样可以用这个方法来判断类型是否符合约束哦。
备注:内容来源于stack exchange,提问作者sina kasesaz
相关产品推荐
相关产品推荐

