2017-06-06 19 views
1

デコレータを使用している場合と使用していない場合の両方で機能を使用できるかどうかを理解できますか?デコレータを破棄します

例:私の心に来る

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()) 

まあ、(ハロー使用することが可能である)デコレータなし?

+1

'italic_hello = makeitalic(hello)'はこれは基本的に '@ makeitalic'の構文的な砂糖がやっていることです。 – jonrsharpe

+0

実際の関数を 'wrapped'の属性として割り当てることができます。 –

+0

そのような動的な動作が必要な場合は、デコレータを使用しないでください。 – pvg

答えて

0

一般的ではありません。装飾機能を元のものに置き換えます。したがって、デコレータ自体を明示的に使用可能にしない限り、オリジナルを取得する方法はありません(たとえば、一部のグローバルレジストリに格納するか、オブジェクトの属性として格納する)。 (装飾された関数のクロージャーオブジェクトのセル変数としてアクセスすることはできますが、それはあまり堅牢ではないため、テストや実験を除いては信頼できません)

関連する問題