Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Decorators with parameters?

I have a problem with the transfer of variable 'insurance_mode' by the decorator. I would do it by the following decorator statement:

@execute_complete_reservation(True) def test_booking_gta_object(self):     self.test_select_gta_object() 

but unfortunately, this statement does not work. Perhaps maybe there is better way to solve this problem.

def execute_complete_reservation(test_case,insurance_mode):     def inner_function(self,*args,**kwargs):         self.test_create_qsf_query()         test_case(self,*args,**kwargs)         self.test_select_room_option()         if insurance_mode:             self.test_accept_insurance_crosseling()         else:             self.test_decline_insurance_crosseling()         self.test_configure_pax_details()         self.test_configure_payer_details      return inner_function 
like image 694
falek.marcin Avatar asked May 08 '11 17:05

falek.marcin


People also ask

Can decorator have arguments?

The decorator arguments are accessible to the inner decorator through a closure, exactly like how the wrapped() inner function can access f . And since closures extend to all the levels of inner functions, arg is also accessible from within wrapped() if necessary.

What is decorator explain with example?

A decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying its structure. Decorators are usually called before the definition of a function you want to decorate.

How do you create a parameter in Python?

Function blocks begin with the keyword def followed by the function name and parentheses ( ( ) ). Any input parameters or arguments should be placed within these parentheses. You can also define parameters inside these parentheses.


1 Answers

The syntax for decorators with arguments is a bit different - the decorator with arguments should return a function that will take a function and return another function. So it should really return a normal decorator. A bit confusing, right? What I mean is:

def decorator_factory(argument):     def decorator(function):         def wrapper(*args, **kwargs):             funny_stuff()             something_with_argument(argument)             result = function(*args, **kwargs)             more_funny_stuff()             return result         return wrapper     return decorator 

Here you can read more on the subject - it's also possible to implement this using callable objects and that is also explained there.

like image 141
t.dubrownik Avatar answered Oct 07 '22 01:10

t.dubrownik