我需要对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
我怎样才能真正获得我感兴趣的功能。
答案 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