我试图使用inspect.ismethod()来检测函数是实例方法还是python装饰器中的模块级函数。它返回false。是什么原因?如何检测函数是实例方法还是装饰器内的模块级函数,如下所示。
示例:
import inspect
class A(object):
@deco("somearg")
def sample(self):
print "abc"
a = A()
print inspect.ismethod(a.sample) # Returns True
以上打印返回true。
我的装饰师就像下面这样。我需要在实际代码中将参数传递给decorator,以便它在函数内部:
def deco(some_arg=None):
def decorator(func):
def wrapper(*args, **kwargs):
print some_arg
print inspect.ismethod(func)
return wrapper
return decorator
上面的inspect.ismethod()返回false。
我的python版本是2.7.13
答案 0 :(得分:1)
请注意,从函数对象转换为(未绑定或 每次从中检索属性时都会发生方法对象 班级或实例。
你正在装饰的是一种功能。嵌套在类中的函数仍然是函数。当您从类或类的实例访问函数时,它将分类为方法。
您可以从self
中的wrapper
参数访问方法对象:
def deco(some_arg=None):
def decorator(func):
def wrapper(*args, **kwargs):
print some_arg
print inspect.ismethod(args[0].sample)
return wrapper
return decorator