2016-11-14 6 views
0

Мне нужно иметь декоратор, который принимает аргумент, и если этот метод должен быть разрешен (на основе некоторой простой логики) или вызвать исключение. но я понятия не имею, как я могу написать этот декоратор.Декоратор Python, который запускает метод или создает исключение

class One(obj): 
    trend = "trend" 
    @myDecorator(self.trend) 
    def click_button(self): 
     clickable_element = self.driver.find_element_by_id(self.trend) 
     clickable_element.click() 
     return self 


class Two(obj): 
    map = "map" 

    @myDecorator(self.map) 
    def click_button(self): 
     clickable_element = self.driver.find_element_by_id(self.map) 
     clickable_element.click() 
     return self 

Логика должна быть чем-то вроде этого:

def my Decorator(arg): 
    if arg: 
     "run the method" 
    else: 
     raise "Exception" 

ответ

1
def parametrised_decorator(parameter): 
    def parametrised(function): 
     @functools.wraps(function) 
     def inner(*args, **kwargs): 
      if parameter: 
       return function(*args, **kwargs) 
      else: 
       raise Exception() 

     return inner 

    return parametrised 
0
def my_Decorator(arg=None): 
    def decorator(func): 
     def wrapper(*args, **kwargs): 
      if arg: 
       return func(*args, **kwargs) 

      else: 
       raise Exception() 

     return wrapper 

    return decorator 
0
from functools import wraps 


def my_decorator(f): 
    @wraps(f) 
    def wrapper(*args, **kwargs): 
     if kwargs.pop('runit', None): 
      return f(*args, **kwargs) 
     else: 
      raise Exception() 
    return wrapper 


@my_decorator 
def example(): 
    print('example') 


if __name__ == '__main__': 
    # runs function 
    example(runit=True) 
    # runs exception 
    example()