Декораторы Python и наследование

Выручите парня. Может казаться, не заставляет декоратора работать с наследованием. Сломал его к самому простому небольшому примеру в моей рабочей области царапины. Все еще, может казаться, не получает его работа.

class bar(object):
    def __init__(self):
        self.val = 4
    def setVal(self,x):
        self.val = x
    def decor(self, func):
        def increment(self, x):
            return func( self, x ) + self.val
        return increment

class foo(bar):
    def __init__(self):
        bar.__init__(self)
    @decor
    def add(self, x):
        return x

Ой, имя "обстановка" не определяется.

Хорошо, как насчет @bar.decor? TypeError: несвязанный метод "обстановка" нужно назвать с экземпляром панели как первый аргумент (получил функциональный экземпляр вместо этого),

Хорошо, как насчет @self.decor? Имя "сам" не определяется.

Хорошо, как насчет @foo.decor?! Имя "нечто" не определяется.

AaaaAAaAaaaarrrrgggg... Что я делаю неправильно?

17
задан wheaties 8 June 2010 в 20:42
поделиться

1 ответ

Определите decor как статический метод и используйте форму @bar.decor:

class bar(object):
    def __init__(self):
        self.val = 4
    def setVal(self,x):
        self.val = x
    @staticmethod
    def decor(func):
        def increment(self, x):
            return func(self, x) + self.val
        return increment

class foo(bar):
    def __init__(self):
        bar.__init__(self)
    @bar.decor
    def add(self, x):
        return x
20
ответ дан 30 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: