Je tente de décorer une méthode dans une classe mais python lance une erreur. Ma classe ressemble à ceci:Comment décorer une méthode dans une classe?
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 jette l'erreur suivante
self.createHeader() TypeError: wrapped() takes no arguments (1 given)
Où suis-je Goofing?
oh ... et « createHeader », vous retournez un tuple. Faites ceci à la place: 'return" En-tête de page "+ self.PageName' – exhuma
techniquement vous pouvez aussi faire' def wrapped (self) ', sauf si vous voulez utiliser le décorateur aussi en dehors d'une classe. Mais alors les fonctions décorées doivent traiter avec soi-même avec élégance! – exhuma
donc 'fn' est le même que' fn (self, ...) 'ou quelle est la bonne façon de penser où soi si? –