对 python 修饰方法的反思
Introspection on a python decorated method
我需要对 python 2.7 中的修饰方法进行一些反思。通常我使用 getattr(my_module, 'my_method')
但以下情况 returns 我是装饰器的外部函数。
在my_module.py
def my_decorator(function):
def outer():
return function()
return outer
@my_decorator
def my_method():
pass
现在 shell:
>>> import my_module
>>> getattr(my_module, 'my_method')
<function outer at 0x7f46958aa668>
怎样才能真正得到自己感兴趣的功能
您可以通过检查 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
我需要对 python 2.7 中的修饰方法进行一些反思。通常我使用 getattr(my_module, 'my_method')
但以下情况 returns 我是装饰器的外部函数。
在my_module.py
def my_decorator(function):
def outer():
return function()
return outer
@my_decorator
def my_method():
pass
现在 shell:
>>> import my_module
>>> getattr(my_module, 'my_method')
<function outer at 0x7f46958aa668>
怎样才能真正得到自己感兴趣的功能
您可以通过检查 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