__Setattr__ zur Laufzeit überschreiben

Ich versuche das zu überschreiben__setattr__ Methode einer Python-Klasse, da ich jedes Mal, wenn ein Instanzattribut seinen Wert ändert, eine andere Funktion aufrufen möchte. Ich möchte dieses Verhalten jedoch nicht in der__init__ Methode, da ich während dieser Initialisierung einige Attribute festgelegt habe, die später verwendet werden sollen:

Bisher habe ich diese Lösung, ohne sie zu überschreiben__setattr__ zur Laufzeit:

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)

Diese möchte ich jedoch vermeidenobject.__setattr__(...) und überschreiben__setattr__ am Ende von__init__ Methode:

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)

Ich habe es mit versuchtself.__dict__['__setitem__'] = self.aux undobject.__setitem__['__setitem__'] = self.aux, aber keiner dieser Versuche hat Wirkung. ich habe gelesenDieser Abschnitt der Datenmodellreferenz, aber es sieht aus wie die Zuordnung der eigenen__setattr__ ist ein bisschen knifflig.

Wie könnte es möglich sein, zu überschreiben__setattr__ am Ende von__init__, oder zumindest eine pythonische Lösung haben, wo__setattr__ wird auf die normale weise nur im konstruktor aufgerufen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage