Estoy intentando decorar un método dentro de una clase, pero Python está arrojando un error. Mi clase es el siguiente:¿Cómo decorar un método dentro de una clase?
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 lanza el siguiente error
self.createHeader() TypeError: wrapped() takes no arguments (1 given)
¿Dónde estoy haciendo el tonto?
oh ... y en "createHeader", va a devolver una tupla Haga esto en su lugar: 'return' Page Header "+ self.PageName ' – exhuma
técnicamente también podría hacer' def wrapped (self) ', a menos que desee utilizar el decorador también fuera de una clase. ¡Pero entonces las funciones decoradas deben tratar con 'yo' con gracia! – exhuma
entonces 'fn' es lo mismo que' fn (self, ...) 'o ¿cuál es la forma correcta de pensar en self si? –