2017-06-06 87 views
1

你能帮助我了解是否有可能使用的功能都与一个装饰,没有它。丢弃装饰

例子:

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

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

嗯,是有可能没有装饰用HELLO():

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

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

是在我脑海中的唯一途径?

+1

注意'italic_hello = makeitalic(你好)'会更简单 - 这基本上是'@ makeitalic'的语法糖所做的。 – jonrsharpe

+0

您可以将实际功能作为属性分配给“包裹”。 –

+0

如果您需要这种动态行为,请勿使用装饰器。 – pvg

回答

0

不一般。装饰功能替换原,所以没有办法让原始除非装饰本身就是它明确地提供(例如,通过将其存储在一些全球注册或某个对象的属性)。 (你可以访问它的装饰功能的关闭对象细胞变量,但是这并不是非常强大,除了检测和实验不应加以依赖。)