Anulando __setattr__ en tiempo de ejecución

Estoy tratando de anular el__setattr__ Método de una clase de Python, ya que quiero llamar a otra función cada vez que un atributo de instancia cambia su valor. Sin embargo, no quiero este comportamiento en el__init__ Método, porque durante esta inicialización establezco algunos atributos que se utilizarán más adelante:

Hasta ahora tengo esta solución, sin anular__setattr__ en tiempo de ejecución:

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)

Sin embargo, me gustaría evitar estosobject.__setattr__(...) y anular__setattr__ al final de__init__ método:

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)

Lo he intentado conself.__dict__['__setitem__'] = self.aux yobject.__setitem__['__setitem__'] = self.aux, pero ninguno de estos intentos tiene efecto. he leídoEsta sección de la referencia del modelo de datos., pero parece que la asignacion del propio__setattr__ es un poco complicado

¿Cómo podría ser posible anular__setattr__ al final de__init__, o al menos tener una solución pitónica donde__setattr__ Se llama de la forma normal solo en el constructor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta