我试图在一个类中装饰一个方法,但是 python 抛出一个错误。我的类(class)是这样的:
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 抛出以下错误
self.createHeader()
TypeError: wrapped() takes no arguments (1 given)
我在哪里偷懒?
最佳答案
您省略了未修饰函数中存在的 self 参数(在您的情况下为 createHeader)。
def formatHeader(fn):
from functools import wraps
@wraps(fn)
def wrapper(self):
return '<div class="page_header">'+fn(self)+'</div>'
return wrapper
如果你不确定你要装饰的函数的签名,你可以把它写得比较笼统,如下:
def formatHeader(fn):
from functools import wraps
@wraps(fn)
def wrapper(*args, **kw):
return '<div class="page_header">'+fn(*args, **kw)+'</div>'
return wrapper
关于python - 如何在类中装饰方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1367514/