Python 3.8中使用__dict__无法访问类property属性的问题
问题原因
@property 装饰器创建的是类层面的属性访问接口,并非直接存储在实例的__dict__里的属性。你看到的_brand才是实例中真实存储的私有变量,brand只是通过类定义的getter/setter来间接读写_brand的入口,所以__dict__只会显示实际存在的实例变量_brand和city。
解决办法
根据你的需求,有几种不同的处理方式:
1. 直接获取brand属性值
既然已经通过@property定义了访问接口,直接通过实例调用就能拿到对应的值:
print(ola.brand) # 输出: Coca-Cola
2. 整合实例变量与property属性
如果需要把brand和实例的其他变量放在一起,可以通过遍历类的属性筛选出property类型,再结合实例的__dict__整理:
# 从类中筛选出所有property属性 props = [name for name, val in test2.__dict__.items() if isinstance(val, property)] # 合并实例变量和property属性值 full_attrs = dict(ola.__dict__) for prop in props: full_attrs[prop] = getattr(ola, prop) print(full_attrs) # 输出: {'_brand': 'Coca-Cola', 'city': 'London', 'brand': 'Coca-Cola'}
3. 查看所有可访问属性
用dir()函数可以列出实例所有能访问的属性名,包括brand、_brand、city以及内置属性:
print(dir(ola))
内容的提问来源于stack exchange,提问作者tomas_s
相关产品推荐
相关产品推荐

