具有参数的python装饰器

问题:

我有一个问题,传递的变量’insurance_mode’由装饰器。我会通过以下装饰器语句来做:

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

但不幸的是,这个声明不行。也许有更好的方法来解决这个问题。

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

回答:

你的意思是def test_booking_gta_object,对吧?无论如何,带参数的装饰器的语法有点不同 – 具有参数的装饰器应该返回一个将take a function并返回另一个函数的函数。所以它应该真的返回一个正常的装饰。有点混乱,对吧?我的意思是:

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

 Here您可以阅读更多关于该主题的内容 – 也可以使用可调用对象来实现这一点,并在那里进行说明。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: python decorators with parameters

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

46 + = 48