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

如何在Python泛型基类中获取泛型类属性?

解决方案

要在BaseClass内部实现通过子类直接获取泛型参数类名的功能,可利用Python的泛型类型解析工具,从子类的原始基类信息中提取泛型参数。具体实现如下:

首先导入必要的类型工具:

from typing import Generic, TypeVar, AbstractBaseClass, get_args, get_origin

定义类型变量和基类:

T = TypeVar('T')

class BaseClass(AbstractBaseClass, Generic[T]):
    @classmethod
    @property
    def targetType(cls) -> str:
        # 遍历子类的原始基类(包含泛型参数的完整定义)
        for base in cls.__orig_bases__:
            # 判断当前基类是否是BaseClass的泛型实例
            if get_origin(base) is BaseClass:
                # 提取泛型参数并返回类名
                target_class = get_args(base)[0]
                return target_class.__name__
        raise ValueError("当前子类未指定BaseClass的泛型参数")

使用示例:

class Someclass:
    pass

class ExampleClass(BaseClass[Someclass]):
    pass

# 直接通过类属性获取目标类名
print(ExampleClass.targetType)  # 输出: Someclass

说明

  • __orig_bases__是Python 3.7+提供的属性,保存了类定义时的原始基类(包含泛型参数的完整信息)。
  • get_origin用于判断基类是否是指定泛型类的实例,get_args则提取泛型参数。
  • 通过类属性targetType的方式,完全满足你希望通过ExampleClass.targetType直接访问的需求,无需在每个子类中重复编写代码。

内容的提问来源于stack exchange,提问作者Jiew Meng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:04:57