Переопределение __setattr__ во время выполнения

Я пытаюсь переопределить__setattr__ метод класса Python, так как я хочу вызывать другую функцию каждый раз, когда атрибут экземпляра меняет свое значение. Однако я не хочу, чтобы такое поведение__init__ метод, потому что во время этой инициализации я установил некоторые атрибуты, которые будут использоваться позже:

Пока у меня есть это решение, без переопределения__setattr__ во время выполнения:

class Foo(object):
    def __init__(self, a, host):
        object.__setattr__(self, 'a', a)
        object.__setattr__(self, 'b', b)
        result = self.process(a)
        for key, value in result.items():
            object.__setattr__(self, key, value)

    def __setattr__(self, name, value):
        print(self.b) # Call to a function using self.b
        object.__setattr__(self, name, value)

Тем не менее, я хотел бы избежать этихobject.__setattr__(...) и переопределить__setattr__ в конце__init__ метод:

class Foo(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
        result = self.process(a)
        for key, value in result.items():
            setattr(self, key, value)
        # override self.__setattr__ here

    def aux(self, name, value):
        print(self.b)
        object.__setattr__(self, name, value)

Я пробовал сself.__dict__['__setitem__'] = self.aux а такжеobject.__setitem__['__setitem__'] = self.aux, но ни одна из этих попыток не имеет эффекта. я прочиталэтот раздел ссылки на модель данных, но похоже на присвоение собственного__setattr__ это немного сложно.

Как можно было переопределить__setattr__ в конце__init__или, по крайней мере, есть питонное решение, где__setattr__ нормальным образом вызывается только в конструкторе?

Ответы на вопрос(2)

Ваш ответ на вопрос