I am attempting to decorate a method inside a class but python is throwing an error. My class looks like this:
from pageutils import formatHeader
class 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 throws the following error
self.createHeader()
TypeError: wrapped() takes no arguments (1 given)
Where am I goofing?
Python automatically passes the class instance as reference. (The self
argument which is seen in all instance methods).
You could do:
def formatHeader(fn):
def wrapped(self=None):
return '<div class="page_header">'+fn(self)+'</div>'
return wrapped