Ответ
__dict__ — это специальный атрибут, который хранит изменяемое пространство имен объекта в виде словаря. В нем содержатся атрибуты экземпляра класса.
Пример использования:
class Project:
def __init__(self, name, priority):
self.name = name
self.priority = priority
self.status = 'active'
project = Project('API Migration', 'high')
# __dict__ содержит атрибуты экземпляра
print(project.__dict__)
# Вывод: {'name': 'API Migration', 'priority': 'high', 'status': 'active'}
# Динамическое изменение атрибутов через __dict__
project.__dict__['deadline'] = '2024-12-01'
print(project.deadline) # 2024-12-01
# Удаление атрибута
del project.__dict__['status']
Важные детали:
- Для экземпляров:
obj.__dict__хранит атрибуты, назначенные черезself.attrили динамически. - Для классов:
ClassName.__dict__хранит атрибуты класса, включая методы (он является более сложным объектомmappingproxy). - Ограничения: Объекты, классы которых определяют
__slots__, не имеют атрибута__dict__для экономии памяти. Также его нет у многих встроенных типов (например,list,int). - Применение: Часто используется для сериализации, интроспекции (например, в ORM) или динамического управления атрибутами.