我在python中有一个返回内部函数的函数
def parent_func(func):
def decorator(a,b):
return a + b
return decorator
简化让我们考虑一下这段代码
def in_func ( a, b)
return a*b
child = parent_func ( in_func)
有人知道从child获取parent_func的“func”属性的方法吗?
答案 0 :(得分:2)
func
属性仅存在于parent_func()
函数的范围内。
如果你真的需要这个值,你可以公开它:
def parent_func(func):
def decorator(a,b):
return a + b
decorator.original_function = func
return decorator
接下来的问题是,你为什么要这样做? 这个问题背后的实际设计问题是什么?
答案 1 :(得分:0)
您可以在返回之前将其作为属性存储在decorator
上。
>>> def parent_func(func):
... def decorator(a,b):
... return a + b
... decorator.func = func
... return decorator
...
>>> @parent_func
... def product(a, b):
... return a * b
...
>>> product.func
<function product at 0x000000000274BD48>
>>> product(1, 1)
2
你在这里略微滥用装饰者。编写一个完全忽略原始函数的装饰器是什么意思?
哦,我还使用了@foo
装饰器语法,因为它更干净。不过,这相当于你所写的内容。