Может ли метод быть декоратором другого метода того же класса?

У меня есть класс с унылым повторяющимся паттерном по своим функциям и я хотел превратить этот паттерн в декоратор. Но дело в том, что этот декоратор должен обращаться к некоторым атрибутам текущего экземпляра, поэтому я хотел превратить его в метод в этом классе. У меня с этим проблемы.

Итак, это похоже на то, что я хочу:

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. Но я понятия не имею, как использовать метод из текущего экземпляра в качестве декоратора.

Есть ли простой способ сделать это?

РЕДАКТИРОВАТЬ :Хорошо, ответ очевиден. Как говорит Свен, сам декоратор просто трансформирует метод. Сам метод должен иметь дело со всеми вещами, касающимися экземпляра :

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
-. 121 ---999612- Как отключить взаимодействие с пользователем в пользовательском представлении У меня есть собственный View NSView, и я хочу отключить взаимодействие с пользователем, но я не знаю, как это сделать. Моя идея была :[myView setEnabled :NO]; но это неправильно и не работает. Как мне сделать так, чтобы,...

У меня есть пользовательский вид NSView, и я хочу отключить взаимодействие с пользователем, но не знаю, как это сделать.

Моя идея была:

[myView setEnabled:NO];

но это неправильно и не работает. Как я могу сделать так, чтобы он был виден только пользователю и ничего больше?

14
задан Ben Close 8 November 2013 в 14:20
поделиться

0 ответов