You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何获取变量的完整泛型类型?

Python获取容器类型含内部元素类型的方案

现成第三方包方案

首推beartype,这是专门处理Python运行时类型的工具包,无需手动写递归逻辑,直接调用内置工具函数即可输出你需要的格式。
安装命令:
pip install beartype
使用示例:

from beartype._util.text.utiltextrepr import represent_object

foo = [1, 2, 3]
print(represent_object(foo))
# 输出:list[int, int, int]

如果需要统一类型去重的输出格式,可以搭配beartype的类型判断工具实现。

轻量自定义实现方案

如果不想引入第三方依赖,几十行代码就能实现满足打印需求的类型获取函数,示例如下:

def get_full_type(var, deduplicate_elem=True):
    base_type = type(var).__name__
    # 处理列表类型
    if isinstance(var, list):
        if not var:
            return f"{base_type}[]"
        elem_types = [get_full_type(e) for e in var]
        if deduplicate_elem and len(set(elem_types)) == 1:
            return f"{base_type}[{elem_types[0]}]"
        return f"{base_type}[{', '.join(elem_types)}]"
    # 处理字典类型
    if isinstance(var, dict):
        if not var:
            return f"{base_type}{{}}"
        item_types = [f"{get_full_type(k)}: {get_full_type(v)}" for k, v in var.items()]
        return f"{base_type}{{{', '.join(item_types)}}}"
    # 处理元组、集合等其他容器可自行按相同逻辑扩展
    if isinstance(var, tuple):
        elem_types = [get_full_type(e) for e in var]
        return f"{base_type}[{', '.join(elem_types)}]"
    # 基础类型直接返回名称
    return base_type

# 测试用例
foo = [1, 2, 3]
print(get_full_type(foo))
# 输出:list[int]

bar = [1, "a", 3.14]
print(get_full_type(bar))
# 输出:list[int, str, float]

baz = {"name": "张三", "age": 18, "hobbies": ["游泳", "跑步"]}
print(get_full_type(baz))
# 输出:dict[str: str, str: int, str: list[str]]

你可以根据自己的打印需求,扩展对元组、集合、自定义类等其他类型的处理逻辑。

内容的提问来源于stack exchange,提问作者Andreas Pettersson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:36:10