Ответ 1
Они декораторы.
<shameless plug>
У меня есть сообщение в блоге по этому вопросу.
</shameless plug>
В нескольких примерах я заметил такие вещи, как:
# Comments explaining code i think
@innerclass
или
def foo():
"""
Basic Doc String
"""
@classmethod
Googling не заводит меня очень далеко, просто для общего определения того, что это такое. Также я не могу найти что-либо действительно в документации python.
Что они делают?
Они декораторы.
<shameless plug>
У меня есть сообщение в блоге по этому вопросу.
</shameless plug>
Они называются декораторами. Это функции, применяемые к другим функциям. Вот копия моего ответа на аналогичный вопрос.
Декораторы Python добавляют дополнительную функциональность к другой функции. Курсивный декоратор может быть похож на
def makeitalic(fn):
def newFunc():
return "<i>" + fn() + "</i>"
return newFunc
Обратите внимание, что функция определена внутри функции. В основном это означает замену функции на новую. Например, у меня есть этот класс
class foo:
def bar(self):
print "hi"
def foobar(self):
print "hi again"
Теперь скажите, я хочу, чтобы обе функции печатали "---" после и до их завершения. Я мог бы добавить печать "---" до и после каждого оператора печати. Но поскольку я не люблю повторять себя, я сделаю декоратор
def addDashes(fn): # notice it takes a function as an argument
def newFunction(self): # define a new function
print "---"
fn(self) # call the original function
print "---"
return newFunction
# Return the newly defined function - it will "replace" the original
Итак, теперь я могу изменить свой класс на
class foo:
@addDashes
def bar(self):
print "hi"
@addDashes
def foobar(self):
print "hi again"
Подробнее о декораторах, проверьте http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
С
@function
def f():
pass
вы просто оберните function
вокруг f()
. function
называется декоратором.
Это просто синтаксический сахар для следующего:
def f():
pass
f=function(f)
это decorator
синтаксис.