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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:17:06