【发布时间】:2012-07-30 13:18:05
【问题描述】:
跟进earlier thread 我的问题是我该如何接受这个表达式:fn(self,*args, **kwargs 并像这样self.fn(...) 以oo 方式调用它,这是我的总程序,其中失败的行被注释掉了:
def formatHeader(fn):
def wrapped(*args, **kwargs):
print "here is args prior to extraction - {0}".format(args)
if len(args) > 1:
self,args = args # remove self from args
else:
self, args= args[0], ()
print("Here are the arguments after extraction: {0} {1}".format(self, args))
#return '<div class="page_header">' + self.fn(*args, **kwargs)+'</div>'
return '<div class="page_header">' + fn(self,*args, **kwargs)+'</div>'
return wrapped
class MyPage(object):
def __init__(self):
self.PageName = ''
def createPage(self):
pageHeader = self.createHeader()
return pageHeader
def addem(self, a, b):
return a + b
@formatHeader #<----- decorator
def createHeader(self):
return "Page Header " + self.PageName
obj = MyPage()
print obj.createHeader()
【问题讨论】:
-
请修正您的格式。看起来并非所有代码都进入了代码块。
-
... 现在的情况有什么问题?装饰器应用于函数,它们不关心类,编写类时也不应该关心。 (另外,如果你保持现在的样子,你的代码可以在课堂外使用)