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
相关产品推荐
相关产品推荐

