理解 Python 中的 __dict__ 属性

什么是 dict

__dict__是一个用于存储对象或类实例属性的字典。每当我们给对象添加一个属性,Python 会将这个属性和值存储在这个字典中。它以键值对的形式将对象的属性名作为键,将对应的属性值作为值。这是 Python 实现动态添加属性和管理对象状态的基础。

class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age

obj = MyClass("Alice", 25)
print(obj.__dict__)

输出:

{
    
    'name': 'Alice', 'age': 25}

dict 的特点

  • 字典形式存储:对象的所有实例属性都会被存储在 __dict__中,因此可以通过字典的方式访问和修改对象的属性。
  • 动态性:可以在运行时随时添加、修改或删除对象的属性,__dict__将立即反映这些变化。
  • 并非所有对象都有 __dict__:值得注意的是,只有那些没有使用 __slots__限制的类才会有 __dict__属性。使用
    __slots__的类会限制动态属性添加,从而提高内存效率。

如何使用 __dict__

动态添加和修改属性

可以直接向 __dict__中添加新的键值对,从而动态地为对象添加属性:

class MyClass:
    def __init__(self, name):
        self.name = name

obj = MyClass("Alice")
obj.__dict__['age'] = 25  # 动态添加属性
print(obj.age)  # 25

访问和修改属性

obj.__dict__['name'] = "Bob"  # 修改属性值
print(obj.name)  # 输出:Bob

迭代所有属性

通过 __dict__,可以轻松遍历一个对象的所有属性和它们的值:

for key, value in obj.__dict__.items():
    print(f"{
      
      key}: {
      
      value}")

dict 的应用场景

  • 对象序列化:__dict__常常被用于将对象的属性序列化为JSON等格式,便于存储或网络传输。
import json
obj = MyClass("Alice", 25)
obj_dict = obj.__dict__
json_data = json.dumps(obj_dict)
print(json_data)

  • 调试与日志记录:在调试过程中,打印__dict__ 可以快速查看对象的所有属性,便于发现问题。
  • 元编程与反射:通过 __dict__,可以动态获取和修改对象的属性,这为实现高度动态的代码提供了支持。

猜你喜欢

转载自blog.csdn.net/summerriver1/article/details/142728323