Ответ 1
Цель dictproxy
(найденная в классах) - разрешить оптимизацию в интерпретаторе Python и обеспечить его стабильность. Дополнительную информацию о требованиях к оптимизации см. В комментарии MartijnPieters ниже, которые, по-видимому, полагаются на ключи class.__dict__
, всегда являющиеся строками.
dictproxy
также, похоже, играет определенную роль в защите от определенных неустойчивостей в интерпретаторе. Для получения дополнительной информации об одной такой нестабильности см. Отчет об ошибке и исправление ошибок, обсуждаемое на python.org, с заголовком Обход __dict__ readonlyness. Если вы не используете какой-либо механизм прокси-сервера, тогда __dict__
можно записать в. Если его можно записать, его можно удалить. В отчете об ошибке они обсуждают некоторые сценарии, в которых можно удалить __dict__
и вызвать сбой интерпретатора.
Обратите внимание, что это контрастирует с экземплярами класса, которые вы можете назначать напрямую или с помощью __setitem__()
:
-
instance.__dict__['x'] = 1
Кроме того, экземпляр __dict__
может быть удален. Если он удален, он автоматически создается повторно при попытке назначения атрибута:
del instance.__dict__
instance.a = 1
instance.__dict__
Заключение
Таким образом, dictproxy
позволяет классам работать более оптимально и делает интерпретатор более стабильным.