私はクラス内のメソッドをデコレートしようとしていますが、Pythonはエラーを投げています。私のクラスには、次のようになります。クラス内のメソッドを飾る方法は?
from pageutils import formatHeader
myPage(object):
def __init__(self):
self.PageName = ''
def createPage(self):
pageHeader = self.createHeader()
@formatHeader #<----- decorator
def createHeader(self):
return "Page Header ",self.PageName
if __name__=="__main__":
page = myPage()
page.PageName = 'My Page'
page.createPage()
#------- pageutils.py --------------------
def formatHeader(fn):
def wrapped():
return '<div class="page_header">'+fn()+'</div>'
return wrapped
Pythonは、次のエラー
self.createHeader() TypeError: wrapped() takes no arguments (1 given)
私は暇つぶしのですがスローされますか?
ああ...と「createHeader」で、あなたが戻ってきていますタプル。これを代わりに: 'return" Page Header "+ self.PageName' – exhuma
技術的には、デコレータをクラスの外でも使いたい場合を除いて、' def wrapped(self) 'を行うこともできます。しかし、装飾された機能は、「自己」を優雅に扱う必要があります。 – exhuma
だから 'fn'は' fn(self、...) 'と同じですか、あるいはself ifのどこを考える正しい方法は何ですか? –