Я думаю, что причина, по которой вы испытываете эту трудность, заслуживает немного больше информации, чем предоставлено другими ответами.
Проблема в том, когда вы делаете:
myObject.attribute.thing = value
Вы не назначаете значение атрибуту. Код эквивалентен этому:
anAttribute = myObject.attribute
anAttribute.thing = value
Как видно из myObject, все, что вы делаете, получает атрибут; Вы не устанавливаете атрибут.
Создание подклассов ваших атрибутов, которые вы контролируете и можете определять для __setattr__, является одним из решений.
Альтернативное решение, которое может иметь смысл, если у вас много атрибутов разных типов и вы не хотите создавать множество отдельных подклассов для всех из них, - переопределить __getattribute__ или __getattr__, чтобы вернуть фасад атрибуту, который выполняет соответствующие операции в своем методе __setattr__. Я не пытался сделать это сам, но я думаю, что вы сможете создать простой класс фасадов, который будет действовать как фасад для любого объекта.
Необходимо соблюдать осторожность при выборе __ getattribute __ и __ getattr __ . См. Документацию, связанную в предыдущем предложении, для получения информации, но в основном, если используется __getattr__, фактические атрибуты будут как-то инкапсулированы / обфусцированы так, что __getattr__ обрабатывает запросы для них, а если используется __getattribute__, ему придется получать атрибуты через звонки в базовый класс.
Если все, что вы пытаетесь сделать, это определить, были ли обновлены некоторые из них, тогда это излишне.