2011-07-15 2 views
1

Можно создать дубликат:
Understanding Python decoratorsпитон строки, начинающаяся с @

Я читал Джанго исходного кода приложения, где я нахожу это

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

Что делает линию которые начинаются с @ означает?

+0

http://stackoverflow.com/questions/739654/understanding-python-decorators –

+1

+1, потому что это действительно вопрос, потому что вы не знаете, что вы должны поиск декораторов, когда вы видите символ '@' в первый раз. – Framester

+0

Также правильным дублированием будет http://stackoverflow.com/questions/6392739/what-does-the-at-symbol-do-in-python – Framester

ответ

4

Это декоратор, который является особым типом функции (или класса, в некоторых случаях) в Python, который изменяет поведение другой функции. См. this article.

@decorator 
def my_func(): 
    pass 

действительно только специальный синтаксис для

def my_func(): 
    pass 
my_func = decorator(my_func) 
5

Это декоратор. То, что он делает, в основном обертывает функцию. Это эквивалентно с этим кодом:

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

Он используется для проверки аргументов функции (в данном случае request.session), изменяя аргументы (это может дать функцию другие аргументы, чем проходит), и, возможно, некоторые другие вещи.

0

Это декоратор. Это облегченная запись для:

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

activities = login_required(activities) 
Смежные вопросы