丢弃装饰者

时间:2017-06-06 06:43:43

标签: python

你能帮助我理解是否可以使用装饰器和没有装饰器的功能。

示例:

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makeitalic
def hello():
    return "hello, sir or madam!"

我想到的唯一方法是:

def hello():
    return "hello, sir or madam!"

@makeitalic
def italic_hello():
    return(hello())

嗯,是否可以在没有装饰器的情况下使用hello()?

1 个答案:

答案 0 :(得分:0)

不一般。装饰函数替换原始函数,因此除非装饰器本身使其显式可用(例如,通过将其存储在某个全局注册表中或作为某个对象的属性),否则无法获取原始函数。 (您可以在装饰函数的闭包对象中将其作为单元格变量进行访问,但这不是非常强大,除了测试和实验之外,不应该依赖它。)