2011-03-08 63 views
2

我有Python中的函數返回一個內部函數Python中獲取函數parent屬性

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) 

人是否知道一種方式來獲得的「功能」孩子的parent_func的屬性?

+1

你的「裝飾器」實際上並沒有用任何東西來裝飾'func'。 – 2011-03-08 15:38:25

回答

2

func屬性只存在於parent_func()函數的範圍內。

如果你真的需要這個值,你可以將其暴露:

def parent_func(func): 
    def decorator(a,b): 
     return a + b 

    decorator.original_function = func 
    return decorator 

下一個問題是,你爲什麼要這麼做? 這個問題背後的實際設計問題是什麼?

+0

感謝它的工作 – Shmuel 2011-03-09 08:56:20

+0

順便說一下,實際的設計問題是parent_func是func的裝飾器,我需要真正的功能。 – Shmuel 2011-03-09 08:59:24

+0

@Shuel:謝謝,很高興知道這對你有幫助! – vdboor 2011-03-09 20:22:08

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裝飾器的語法,因爲它更乾淨。不過,這相當於你寫的東西。

+0

感謝它的工作 – Shmuel 2011-03-09 08:56:50