2017-06-06 86 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

不一般。裝飾功能替換原,所以沒有辦法讓原始除非裝飾本身就是它明確地提供(例如,通過將其存儲在一些全球註冊或某個對象的屬性)。 (你可以訪問它的裝飾功能的關閉對象細胞變量,但是這並不是非常強大,除了檢測和實驗不應加以依賴。)