Декораторы и наследование 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
Упс, имя "decor" не определено.
Хорошо, как насчет @bar.decor
? TypeError: unbound метод "decor" должен быть вызван с экземпляром bar в качестве первого аргумента (вместо этого появился экземпляр функции)
Хорошо, как насчет @self.decor
? Имя "я" не определено.
Хорошо, как насчет @foo.decor
?! Имя "foo" не определено.
AaaaAAaAaaaarrrrgggg... Что я делаю неправильно?
Ответы
Ответ 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