对python装饰方法的反思

时间:2015-08-27 16:52:53

标签: python decorator introspection inspect

我需要对python 2.7中的装饰方法进行一些内省。通常我使用5,5,5,5,5,5,5,5 ,但以下情况会返回我装饰器的外部函数。

my_module.py

getattr(my_module, 'my_method')

现在在shell中:

def my_decorator(function):
    def outer():
        return function()
    return outer

@my_decorator
def my_method():
    pass

我怎样才能真正获得我感兴趣的功能。

1 个答案:

答案 0 :(得分:3)

您可以通过内省my_method.__closure__属性(在Python3中)或my_method.func_closure(在Python2中)来访问未修饰的功能:

def my_decorator(function):
    def outer():
        print('outer')
        return function()
    return outer

@my_decorator
def my_method():
    print('inner')

try:
    # Python2
    my_method.func_closure[0].cell_contents()
except AttributeError:
    # Python3
    my_method.__closure__[0].cell_contents()

打印

inner