我实际上并不需要这样做,只是想知道,有没有一种方法可以将装饰器一般地绑定到类中的所有函数,而不是为每个函数显式说明。我想它然后变成一种方面,而不是装饰者,它的确有些奇怪,但是在考虑诸如计时或验证之类的事情时,它会很整洁。
3 回答

倚天杖
TA贡献1828条经验 获得超3个赞
进行此操作或对类定义进行其他修改的最简单方法是定义一个元类。
另外,只需在类定义的末尾应用装饰器即可:
class Something:
def foo(self): pass
for name, fn in inspect.getmembers(Something):
if isinstance(fn, types.UnboundMethodType):
setattr(Something, name, decorator(fn))
对于Python 3,将types.UnboundMethodType替换为types.FunctionType。
当然,在实践中,您将希望有选择地应用装饰器,并且一旦您要装饰除一种方法外的所有装饰,您就会发现仅以传统方式使用装饰器语法会更轻松,更灵活。
添加回答
举报
0/150
提交
取消