如何装饰类中的方法?
我试图装饰一个类中的方法,但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()不带参数(给出1)
我在哪里去打瞌睡?
Python自动传递类实例作为参考。 (在所有的类方法中看到的self
论证)。
你可以这样做:
def formatHeader(fn): def wrapped(self=None): return '<div class="page_header">'+fn(self)+'</div>' return wrapped
你正在省略uncorated函数中存在的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