Вы обычно не можете, поскольку экземпляры определенных C-типов обычно не имеют для каждого экземпляра __dict__
записей для хранения произвольных атрибутов.
Обходной путь для случаев, когда подкласс или класс-обертка не будут работать, - это создание вспомогательного словаря на уровне модуля, который сопоставляет имеющийся у вас объект с дополнительной информацией. Если объект, который у вас есть, не является хэшируемым, вы можете использовать id(obj)
.
Так, например, вы можете сохранить словарь, связанный с идентификатором каждого корневого объекта:
# Module level, setting up the data store
from collections import defaultdict
extra_info = defaultdict(dict) # Creates empty dicts for unknown keys
# Saving the info
root = node.getroottree().getroot()
extra_info[id(root)]["ENV"] = "replacement"
# Retrieving it later
root = node.getroottree().getroot()
info = extra_info[id(root)]