Decoradores Python que fazem parte de uma classe base não podem ser usados para decorar funções-membro em classes herdadas

Os decoradores de Python são divertidos de usar, mas eu pareço ter atingido uma parede devido à maneira como os argumentos são transmitidos aos decoradores. Aqui eu tenho um decorador definido como parte de uma classe base (o decorador acessará os membros da classe e, portanto, exigirá o auto-parâmetro).

class SubSystem(object):
    def UpdateGUI(self, fun): #function decorator
        def wrapper(*args):
            self.updateGUIField(*args)
            return fun(*args)
        return wrapper

    def updateGUIField(self, name, value):
        if name in self.gui:
            if type(self.gui[name]) == System.Windows.Controls.CheckBox:
                self.gui[name].IsChecked = value #update checkbox on ui 
            elif type(self.gui[name]) == System.Windows.Controls.Slider:
                self.gui[name].Value = value # update slider on ui 

        ...

Omiti o restante da implementação. Agora, essa classe é uma classe base para vários subsistemas que herdarão dela - algumas das classes herdadas precisarão usar o decorador UpdateGUI.

class DO(SubSystem):
    def getport(self, port):
        """Returns the value of Digital Output port "port"."""
        pass

    @SubSystem.UpdateGUI
    def setport(self, port, value):
        """Sets the value of Digital Output port "port"."""
        pass

Mais uma vez, omiti as implementações de funções, pois elas não são relevantes.

Resumindo, o problema é que, embora eu possa acessar o decorador definido na classe base a partir da classe herdada, especificando-o como SubSystem.UpdateGUI, finalmente recebo esse TypeError ao tentar usá-lo:

unbound method UpdateGUI() must be called with SubSystem instance as first argument (got function instance instead)

Isso ocorre porque não tenho uma maneira imediatamente identificável de passar oself parâmetro para o decorador!

Existe uma maneira de fazer isso? Ou atingi os limites da implementação atual do decorador em Python?

questionAnswers(4)

yourAnswerToTheQuestion