Выручите парня. Может казаться, не заставляет декоратора работать с наследованием. Сломал его к самому простому небольшому примеру в моей рабочей области царапины. Все еще, может казаться, не получает его работа.
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... Что я делаю неправильно?
Определите 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