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

如何让Python同名类属性和实例属性拥有不同的内存地址?

问题原因

你当前的代码中,__init__方法内的bar: dict = {}仅定义了函数内部的局部变量,并没有绑定到实例对象上。当你访问a.bar时,Python在实例属性中找不到对应的key,就会自动 fallback 到类属性MyClass.bar,所以二者的内存地址完全一致。

解决方法

不需要删除原有类属性,只需要在__init__中把字典赋值给self.bar,绑定为实例属性即可,二者会独立存储,内存地址完全不同。
修正后的示例代码:

class MyClass:
    bar: dict = {}

    def __init__(self):
        # 给实例绑定同名属性
        self.bar: dict = {}


print(id(MyClass.bar))
a = MyClass()
print(id(a.bar))

运行后会输出两个不同的内存地址。

补充说明
  • 后续通过实例访问bar时,会优先读取实例自身的属性,不会触发类属性的访问逻辑
  • 如果需要主动调用类属性,直接使用MyClass.bar即可,和实例属性互不影响,验证示例如下:
MyClass.bar["类属性测试"] = "类属性值"
a.bar["实例属性测试"] = "实例属性值"

print(MyClass.bar)  # 输出:{'类属性测试': '类属性值'}
print(a.bar)  # 输出:{'实例属性测试': '实例属性值'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:45:07