У меня есть класс, где экземпляры этого класса должны отслеживать изменения его атрибутов.
Пример: obj.att = 2
будет легко отслеживаться, просто переопределяя __setattr__
of obj
.
Однако возникает проблема, когда атрибут, который я хочу изменить, является самим объектом, например списком или dict.
Как я могу отслеживать такие вещи, как obj.att.append(1)
или obj.att.pop(2)
?
Я собираюсь расширить список или класс словаря, но экземпляры патчей для обезьян этих классов после инициализации obj
и obj.att
, так что obj
получает уведомление, когда такие вещи, как .append
, называется. Так или иначе, это не очень элегантно.
Другой способ, о котором я могу думать, - передать экземпляр obj
в инициализацию списка, но это сломает много существующего кода плюс, кажется, еще менее изящным, чем предыдущий метод.
Любые другие идеи/предложения? Есть ли простое решение, которое мне не хватает здесь?