1

私はデコレーターが得意ではなく、タスク用にデコレーターを作成しようとしています (明らかに)。基本的に、装飾したい機能があります(Djangoアプリですが、問題ではありません)

def foo(request, param):
    # do something w/ param

ここで、パラメーターを受け取るデコレーターを作成する必要があります。

@mydecorator('VALUE')
def foo(request, param)
    pass

したがって、基本的にはデコレーターが値 foo を受け取り、リクエストでいくつかの作業を行ってから返す必要があります

ここに私がこれまでに持っているものがありますが、機能していません:(

def mydecorator(val):
    @wraps(function)
    def decorator(request, *args, **kwargs):
        # do something with request with respect to val
        return function(request, *args, **kwargs)
    return decorator

助けが必要です、ありがとう

4

1 に答える 1

2

最後に ':' がない foo の 2 番目の定義例とは別に、主な問題は、関数呼び出しであるため mydecorator がデコレータを返さなければならないことです。

mydecorator が引数を取らない場合は、次のように記述します。

@mydecorator
    def foo(request, param)
        pass

そしてそうではない

@mydecorator()
    def foo(request, param)
        pass

あなたが始めるべき知識を考えると:

from functools import wraps

def mydecorator(val):
    def myrealdecorator(function):
        @wraps(function)
        def decorator(request, *args, **kwargs):
            # do something with request with respect to val
            print 'I know about', val
            return function(request, *args, **kwargs)
        return decorator
    return myrealdecorator

@mydecorator('VALUE')
def foo(request, param):
    print 'inside foo'

foo('arg1', 'arg2')
于 2012-05-08T17:32:32.060 に答える