Python泛型是否支持传入数组参数?如何动态构造Union类型提示
解决方案
全版本通用写法(兼容Python 3.8+)
所有泛型类型的下标语法本质是调用__getitem__方法,你手动写的origin[args[0], args[1]]会被自动打包成origin.__getitem__((args[0], args[1]))执行,所以完全不需要写一堆长度判断逻辑,直接把参数列表转成元组传入即可:
from typing import Union # 运行时生成的类型列表 permitted_types = [int, str, bool, float, list, dict] # 直接转元组传入方括号即可构造联合类型 union = Union[tuple(permitted_types)]
你原本的冗余逻辑可以直接简化为一行:
return origin[tuple(args)]
高版本简化写法
- 如果你使用Python 3.11及以上版本,原生支持泛型方括号内的可迭代对象解包语法,你问题里写的
Union[*permitted_types]本身就是合法语法,升级Python版本即可直接运行。 - 如果你使用Python 3.10及以上版本,也可以通过
|运算符累加构造联合类型:
from functools import reduce import operator permitted_types = [int, str, bool, float, list, dict] union = reduce(operator.or_, permitted_types)
内容的提问来源于stack exchange,提问作者tofarr
相关产品推荐
相关产品推荐

