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

Python 3中能否获取子类属性?现有代码无法实现需求

关于Python子类属性获取的问题解答

嘿,这个问题我熟!咱们一步步理清楚:

首先,你代码里的vars(self)返回的是实例对象的__dict__字典,而你在Bar里定义的example_attribute是一个类属性——它存放在Bar这个类的__dict__里,不属于单个实例test的属性集合,所以初始化时打印vars(self)才会输出空字典{}。

要实现你期望的输出,有两种常用方案:

方案1:把类属性转为实例属性

如果这个属性需要属于每个实例,那可以在Bar的构造方法里把它赋值给self,这样它就会出现在实例的__dict__中:

class Foo:
    def __init__(self):
        print(vars(self))
class Bar(Foo):
    def __init__(self):
        super().__init__()
        self.example_attribute = "baz"
test = Bar()
# 输出: {'example_attribute': 'baz'}

方案2:直接获取类的属性

如果你想保留类属性的特性(所有实例共享),同时在父类Foo中获取到子类的类属性,可以直接访问类的__dict__并过滤掉特殊属性:

class Foo:
    def __init__(self):
        # 筛选出非特殊开头的类属性
        class_attrs = {k: v for k, v in self.__class__.__dict__.items() 
                      if not k.startswith('__')}
        print(class_attrs)
class Bar(Foo):
    example_attribute = "baz"
test = Bar()
# 输出: {'example_attribute': 'baz'}

简单总结下:类属性和实例属性存储的位置不同,vars(self)只针对实例属性。根据你的实际需求选对应的方案就好啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:58:12