1

重複の可能性:
Python デコレータを理解する

これを見つけたdjangoアプリのソースコードを読んでいました

@login_required
def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

@で始まる行はどういう意味ですか?

4

4 に答える 4

5

デコレータです。それが行うことは、基本的に関数をラップすることです。次のコードと同等です。

def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...
activities = login_required(activities)

これは、関数の引数 (この場合はrequest.session) のチェック、引数の変更 (関数が渡す以外の引数を関数に与える場合があります)、およびおそらくその他のものに使用されます。

于 2011-07-15T18:47:04.860 に答える
4

これは、別の関数の動作を変更する Python の特別なタイプの関数 (場合によってはクラス) であるデコレータです。この記事を参照してください。

@decorator
def my_func():
    pass

は、実際には特別な構文です

def my_func():
    pass
my_func = decorator(my_func)
于 2011-07-15T18:46:41.273 に答える
3

Python Decorators Explainedを参照してください。すべてを説明する驚くべき答えがあります。

于 2011-07-15T18:46:47.083 に答える
0

デコレータです。これは、次のシンタティック シュガーです。

def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

activities = login_required(activities)
于 2011-07-15T18:47:13.803 に答える