Python获取函数父属性

时间:2011-03-08 15:35:27

标签: python

我在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”属性的方法吗?

2 个答案:

答案 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装饰器语法,因为它更干净。不过,这相当于你所写的内容。