在函数装饰器中,我怎么知道函数是否是类方法?

时间:2014-01-05 20:15:19

标签: python

我有一个@on_event装饰器,它将函数注册为指定事件的回调函数:

@on_event('MY_EVENT')
def on_event_triggers(*a, **k):
    print('Event triggered')

但是,我希望我的装饰者能够处理“全局”函数(如上所述)和类函数:

class MyModule(Module):
    @on_event('MY_EVENT')
    def on_event_triggered(self, *a, **k):
         print('Event triggered in a method')

当然,self参数将正确传递(并由我未在此处显示的某些代码确定)。但是,要实现这一点,我必须能够知道传递给我的装饰器的函数是方法还是全局函数。

我正在使用Python 3.3。

1 个答案:

答案 0 :(得分:2)

你应该提供两个装饰器,一个用于自由函数,一个用于方法。没有简单或可靠的方法来找到装饰器内部的区别。对于编写代码的人来说,这是微不足道的。