2014-07-15 33 views
1

我有3個裝飾器,並希望將它們分別應用到一個函數,以創建3個不同版本的函數。例如:不同的裝飾器相同的功能

@decorator_1 
def foo1(): 
    blahblah 

@decorator_2 
@decorator 
def foo2(): 
    blahblah 

@decorator_3 
def foo3() 
    blahblah 

foo1foo2foo3的內容是完全相同的。問題是我必須寫出3次函數。當然,我可以將blahblah放入另一個函數spam,並在這三個函數中調用它。但我仍然需要創建3個獨立的功能,並且需要撥打spam 3次。有沒有更好的方法可以進一步減少這種冗餘?

回答

4
def foo(): 
    blahblah 

foo1 = decorator_1(foo) 
foo2 = decorator_2(decorator(foo)) 
foo3 = decorator_3(foo) 
+0

是否可以保持裝飾器語法? – RNA

+0

@RNA您可以嵌套它,即將'foo1'定義爲'return foo()'並對其進行裝飾。但這很醜陋而且效率低下。除此之外,沒有這種方式。 – freakish