我在几个例子中注意到我看到了这样的事情:
# Comments explaining code i think
@innerclass
或:
def foo():
"""
Basic Doc String
"""
@classmethod
谷歌搜索并没有让我走得太远,只是对这是什么的一般定义。我也无法在python文档中找到任何内容。
这些是做什么的?
答案 0 :(得分:23)
他们被称为装饰者。它们是应用于其他功能的功能。以下是我对类似问题的回答。
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"
现在说,我希望两个函数在完成之后和之前打印“---”。我可以在每个print语句之前和之后添加一个打印“---”。但因为我不喜欢重复自己,我会做一个装饰师
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
答案 1 :(得分:11)
他们是装饰者。
<shameless plug>
我对这个问题有一个blog post。
</shameless plug>
答案 2 :(得分:4)
用
@function
def f():
pass
您只需将function
包裹在f()
周围。 function
被称为装饰者。
以下是语法糖:
def f():
pass
f=function(f)
答案 3 :(得分:1)
它是decorator
语法。