У меня есть класс с тусклым повторяющимся рисунком на их функциях, и я хотел превратить этот узор в декоратор. Но дело в том, что этот декоратор должен получить доступ к некоторым атрибутам текущего экземпляра, поэтому я хотел превратить его в метод в этом классе. У меня проблемы с этим.
Итак, это похоже на то, что я хочу:
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
def mydecorator(self, myfunction):
def call(*args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return myfunction(*args, **kwargs)
return call
@mydecorator #Here, comment (1) below.
def somemethod(self, x):
return x + 1
(1) Вот проблема. Я хочу использовать метод DullRepetitiveClass.mydecorator
для украшения метода somemethod
. Но я не знаю, как использовать этот метод из текущего экземпляра в качестве декоратора.
Есть ли простой способ сделать это?
EDIT: Хорошо, ответ довольно очевиден. Как Свен помещает его ниже, сам декоратор просто преобразует метод. Сам метод должен иметь дело со всем, что касается экземпляра:
def mydecorator(method):
def call(self, *args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return method(self, *args, **kwargs)
return call
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
@mydecorator
def somemethod(self, x):
return x + 1