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

能否让父类将所有子类的Type类型设为ClassVar类变量?

实现父类ClassVar存储所有子类类型的方案

当然可以实现,核心思路是利用Python的__init_subclass__钩子,在每个子类被创建时自动将其类型注册到父类的sub_types变量中。

具体实现代码

from typing import ClassVar, List, Type

class A:
    # 初始化ClassVar,先包含父类自身
    sub_types: ClassVar[List[Type["A"]]] = [A]

    # 子类创建时自动触发的钩子方法
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        # 将当前子类添加到父类的sub_types列表
        A.sub_types.append(cls)

class B(A): pass
class C(A): pass
class D(A): pass

效果验证

运行后:

  • A.sub_types 的值为 [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>]
  • 由于sub_types是属于类A的ClassVar,子类B、C、D访问该变量时会直接引用父类的属性,所以B.sub_types、C.sub_types、D.sub_types的值和A.sub_types完全一致。

额外说明

如果存在多层继承(比如E继承自B),为了避免重复注册,可以在__init_subclass__里加个判断:

def __init_subclass__(cls, **kwargs):
    super().__init_subclass__(**kwargs)
    if cls not in A.sub_types:
        A.sub_types.append(cls)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:06:34