Python类的__dict__究竟存储了哪些实例属性信息?

2026-05-07 11:330阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计930个文字,预计阅读时间需要4分钟。

Python类的__dict__究竟存储了哪些实例属性信息?

“它不包含任何属性、方法、描述符或内置元信息,仅记录通过self.xxx=...或直接赋值到实例上的键值对。

  • a = A() 后,a.__dict__ 是空字典 {},哪怕类里定义了 x = 10
  • a.x = 1 才会让 a.__dict__ 变成 {'x': 1};此时访问 a.x 优先查这个字典,遮蔽掉类里的同名 A.x
  • a.__dict__['y'] = 20 是合法的,等价于 a.y = 20,但绕过了 __setattr__ 钩子,可能跳过验证逻辑
  • 如果类用了 __slots__,实例将没有 __dict__ 属性,尝试访问会抛出 AttributeError

__dict__ 是 mappingproxy,不能直接写入

它不是普通 dict,而是一个只读映射视图,设计上就禁止 A.__dict__['x'] = 10 这类操作。

阅读全文
标签:Python

本文共计930个文字,预计阅读时间需要4分钟。

Python类的__dict__究竟存储了哪些实例属性信息?

“它不包含任何属性、方法、描述符或内置元信息,仅记录通过self.xxx=...或直接赋值到实例上的键值对。

  • a = A() 后,a.__dict__ 是空字典 {},哪怕类里定义了 x = 10
  • a.x = 1 才会让 a.__dict__ 变成 {'x': 1};此时访问 a.x 优先查这个字典,遮蔽掉类里的同名 A.x
  • a.__dict__['y'] = 20 是合法的,等价于 a.y = 20,但绕过了 __setattr__ 钩子,可能跳过验证逻辑
  • 如果类用了 __slots__,实例将没有 __dict__ 属性,尝试访问会抛出 AttributeError

__dict__ 是 mappingproxy,不能直接写入

它不是普通 dict,而是一个只读映射视图,设计上就禁止 A.__dict__['x'] = 10 这类操作。

阅读全文
标签:Python