2017-05-30 32 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之前更改实例的模式模式。