Python中@符号的作用是什么?

16 投票
4 回答
10946 浏览
提问于 2025-04-15 11:59

我注意到在几个例子中,看到了一些这样的东西:

# Comments explaining code i think
@innerclass

或者:

def foo():
"""
 Basic Doc String
"""
@classmethod

我在网上搜索也没找到什么有用的,想了解一下这到底是什么。还有,我在Python的文档里也找不到相关的信息。

这些东西是干嘛的呢?

4 个回答

5

使用

@function
def f():
    pass

你只需要在 f() 外面加上 function。这里的 function 被称为装饰器。

这其实只是对下面内容的简化写法:

def f():
    pass
f=function(f)
26

它们被称为装饰器。装饰器是应用于其他函数的函数。下面是我对一个类似问题的回答。

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

12

它们是装饰器。

<自我推荐> 我有一篇关于这个主题的博客文章</自我推荐>

撰写回答