2017-05-30 27 views
2

我儘量控制功能的評估與裝飾的幫助。 所以我創建的MyClass一個實例,然後評估條件的功能mode財產訴訟。的Python處理器檢查條件

class MyClass: 
    def __init__(self): 
     self.mode = None 

    def mode_handler(self, mode): 
     def wrap(func): 
      def inner(*args, **kwargs): 
       if mode == self.mode: 
        return func(*args, **kwargs) 
       else: 
        pass 
      return inner 
     return wrap 

a = MyClass() 


@a.mode_handler(mode='repeat') 
def print_args(*args): 
    print(args) 


@a.mode_handler(mode='nuff_saif') 
def nuff_said(): 
    print('NUFF SAID') 

# 1 
a.mode = 'nuff_said' 
print_args(1, 2, 3) 
nuff_said() 

# 2 
a.mode = 'repeat' 
print_args(4, 5, 6) 
nuff_said() 

# 3 
a.mode = 'something_else' 
print_args(7, 8, 9) 
nuff_said() 

我有望獲得

NUFF SAID 
(4, 5, 6) 

如塊mode=='nuff_said'和塊2 mode=='repeat'

(4, 5, 6) 

代替。我應該如何提高我的代碼?

+1

有趣的使用裝飾 – Har

回答

1

問題是與你的模式處理程序本身:

@a.mode_handler(mode='repeat') 
def print_args(*args): 
    print(args) 


@a.mode_handler(mode='nuff_saif') ### Here it is "nuff_saif" 
def nuff_said(): 
    print('NUFF SAID') 

# 1 
a.mode = 'nuff_said' ### Here it is "nuff_said" 
print_args(1, 2, 3) 
nuff_said() 

# 2 
a.mode = 'repeat' 
print_args(4, 5, 6) 
nuff_said() 

您可以編輯你的代碼,它應該工作即可。乾杯。

+0

我假設在這裏,你給您正在使用的確切代碼。 – TheDarkKnight

1

您只需在你的代碼一個錯字。 nuff_said功能的裝飾與nuff_sai ˚F但你調用函數nuff_sai d之前更改實例的模式模式。