【发布时间】:2010-10-16 23:09:27
【问题描述】:
有没有办法在嵌套良好的类结构中编写装饰器?例如,没有类也可以正常工作:
def wrap1(func):
def loc(*args,**kwargs):
print 1
return func(*args,**kwargs)
return loc
def wrap2(func):
def loc(*args,**kwargs):
print 2
return func(*args,**kwargs)
return loc
def wrap3(func):
def loc(*args,**kwargs):
print 3
return func(*args,**kwargs)
return loc
def merger(func):
return wrap1(wrap2(wrap3(func)))
@merger
def merged():
print "merged"
@wrap1
@wrap2
@wrap3
def individually_wrapped():
print "individually wrapped"
merged()
individually_wrapped()
输出是:
1
2
3
merged
1
2
3
individually wrapped
这就是我想要的。但现在假设我想将merged 和individually_wrapped 设为静态或类方法。只要将装饰器保持在类命名空间之外,这也将起作用。有没有什么好方法可以将装饰器放在命名空间中?我宁愿不列举所有不起作用的方法,但主要问题是如果merger 是一个方法,它就无法访问wrapX 方法。也许这是一件愚蠢的事情,但是有没有人让这样的东西工作,所有装饰器和装饰方法都在同一个类中?
【问题讨论】: