2009-06-02 7 views
11

Pythonの@シンボルの目的は?

私はいくつかの例で気付いたことがあります。

# Comments explaining code i think 
@innerclass 

または:

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

これは何の一般的な定義のために、また、私は実際にはPythonのドキュメントで何かを見つけることができません。

これはどうしますか?

+0

@uberjumperをチェックし、デコレータの詳細について

class foo: @addDashes def bar(self): print "hi" @addDashes 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 

を行います - 私達がそれにふさわしいと感じたらabhinavgへの答えを与えるべきです。私はブログに無料のトラフィックをいくつか持っていて、とにかく私よりも担当者が少ない。 –

答えて

10

デコレータです。

<shameless plug> 私は、対象にblog postを持っています。あなたは、単にf()周りfunctionを包む

@function 
def f(): 
    pass 

</shameless plug>

+2

あなたの恥知らずのプラグは、非常によく書かれた明快な記事でした。 – UberJumper

4

functionはデコレータと呼ばれます。

これは、次のためだけの構文糖です:

def f(): 
    pass 
f=function(f) 
+0

私はこの答えが好きで、十分に短いと明確です+1 – Patric

21

彼らがデコレータと呼ばれています。それらは他の関数に適用される関数です。似たような質問に対する私の答えのコピーがここにあります。

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" 

は今言って、私は両方の機能を印刷したいいる「---」彼らが行われた後と前に。私はprint文の前後に "---"という印字を追加することができました。私は自分自身を繰り返して好きではないので、しかし、私はだから今、私はhttp://www.ibm.com/developerworks/linux/library/l-cpdecor.html

+3

私は2人が受け入れられる解決策を与えることができたらいいと思います。 : – UberJumper

+1

FYI - 他の答えはここにあります:http://stackoverflow.com/questions/739654/understanding-python-decorators/739667#739667 –

+0

なぜ、あなたは 'fn' – wordsforthewise

関連する問題