查找模块中的所有修饰函数

The*_*ude 8 python

是否有可能找出函数是否在运行时修饰?例如,我可以在模块中找到由"example"修饰的所有函数吗?

@example
def test1():
    print "test1"
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 9

在一般情况下,它是不可能的,因为example装饰器可能不会留下任何在运行时可检测到的痕迹 - 例如,它可能

def example(f):
  return f
Run Code Online (Sandbox Code Playgroud)

如果您确实控制了源example,那么它很容易标记或记录它正在装饰的功能; 如果你不这样做,完全不可能做你想做的事.


Joh*_*ooy 9

由于您已表明可以控制包装器代码,因此这是一个示例:

def example(f):
    f.wrapped = True
    return f

@example
def test1():
    print "test1"

def test2():
    print "test2"


print test1.wrapped
print hasattr(test2, 'wrapped')
Run Code Online (Sandbox Code Playgroud)