为了账号安全,请及时绑定邮箱和手机立即绑定

将装饰器附加到类中的所有函数上

将装饰器附加到类中的所有函数上

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

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。


当然,在实践中,您将希望有选择地应用装饰器,并且一旦您要装饰除一种方法外的所有装饰,您就会发现仅以传统方式使用装饰器语法会更轻松,更灵活。


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 548 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信