我真的不需要这样做,但只是想知道,有没有办法将装饰器一般地绑定(bind)到类中的所有函数,而不是为每个函数显式声明它。
我想它会变成一种方面,而不是装饰器,它确实感觉有点奇怪,但考虑到时间或身份验证之类的东西会很整洁。
最佳答案
执行此操作或对类定义进行其他修改的最简洁方法是定义元类。
或者,只需使用 inspect
在类定义的末尾应用您的装饰器:
import inspect
class Something:
def foo(self):
pass
for name, fn in inspect.getmembers(Something, inspect.isfunction):
setattr(Something, name, decorator(fn))
在实践中,您当然希望更有选择性地应用您的装饰器。当您想要装饰除一种方法之外的所有方法时,您会发现仅以传统方式使用装饰器语法更容易、更灵活。
关于python - 将装饰器附加到类中的所有函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467526/