Декораторы Python, являющиеся частью базового класса, не могут использоваться для украшения функций-членов в унаследованных классах

Декораторы Python забавны в использовании, но я, кажется, ударил стену из-за способа передачи аргументов декораторам. Здесь у меня есть декоратор, определенный как часть базового класса (декоратор будет обращаться к членам класса, следовательно, ему потребуется параметр self).

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 

        ...

Я опустил остальную часть реализации. Теперь этот класс является базовым классом для различных подсистем, которые будут наследоваться от него - некоторые из унаследованных классов должны будут использовать декоратор 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

Еще раз я опустил реализации функций, поскольку они не имеют отношения к делу.

Короче говоря, проблема в том, что, хотя я могу получить доступ к декоратору, определенному в базовом классе, из унаследованного класса, указав его как SubSystem.UpdateGUI, я в конечном итоге получаю этот TypeError при попытке его использовать:

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

Это потому, что я не могу сразу определить способ прохожденияself параметр декоратору!

Есть ли способ сделать это? Или я достиг пределов текущей реализации декоратора в Python?

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

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