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

Python如何获取作为子类类属性的实例对应的子类名称

解决方案

你要的效果可以通过两种方式实现,分别适配不同的需求场景:

方案1:使用Python描述符协议(推荐,无需修改父类逻辑)

如果你的需求是访问Form.name直接拿到类名字符串,用描述符是最原生简洁的实现:

class Main:
    # 描述符的__get__方法会自动接收3个参数:
    # self:当前Main实例,instance:访问属性的类实例(类访问时为None),owner:属性所属的类
    def __get__(self, instance, owner):
        return owner.__name__

class MainGroup:
    # 原有逻辑保留即可
    pass

class Form(MainGroup):
    name = Main()

测试效果:

print(Form.name)
# 输出:Form

方案2:通过__init_subclass__钩子绑定所属类(适配需要保留Main实例的场景)

如果你需要Form.name本身仍然是Main类的实例,只是打印时输出类名,就用这个方案修改__repr__:

class Main:
    def __repr__(self):
        # 返回提前绑定的所属类名
        return repr(self.belong_class_name)

class MainGroup:
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        # 子类初始化时自动遍历属性,给Main实例绑定所属类名
        for attr_val in cls.__dict__.values():
            if isinstance(attr_val, Main):
                attr_val.belong_class_name = cls.__name__

class Form(MainGroup):
    name = Main()

测试效果:

print(Form.name)
# 输出:'Form'
type(Form.name)
# 输出:<class '__main__.Main'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:21:02