当前位置: 首页 > 面试题库 >

Python-带参数的装饰器?

乐正涵意
2023-03-14
问题内容

我在装饰器传递变量'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 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

在这里,你可以阅读有关该主题的更多信息-也可以使用可调用对象来实现此目的,这也在那里进行了说明。



 类似资料:
  • 问题 你想写一个装饰器,既可以不传参数给它,比如 @decorator , 也可以传递可选参数给它,比如 @decorator(x,y,z) 。 解决方案 下面是9.5小节中日志装饰器的一个修改版本: from functools import wraps, partial import logging def logged(func=None, *, level=logging.DEBUG,

  • 问题 你想定义一个可以接受参数的装饰器 解决方案 我们用一个例子详细阐述下接受参数的处理过程。 假设你想写一个装饰器,给函数添加日志功能,同时允许用户指定日志的级别和其他的选项。 下面是这个装饰器的定义和使用示例: from functools import wraps import logging def logged(level, name=None, message=None):

  • 问题内容: 我已经看到许多Python装饰器的示例,它们是: 函数样式修饰符(包装函数) 类风格装饰(实施,和) 不带参数的装饰器 带参数的装饰器 “方法友好”的装饰器(即可以装饰类中的方法) “功能友好”的装饰器(可以装饰普通功能 可以装饰方法和功能的装饰器 但是我从未见过一个可以完成上述所有操作的示例,而且我无法从各种答案到特定问题,这个或这个上看到过,如何结合以上所有内容。 我想要的是一个

  • 本文向大家介绍Python实现带参数的用户验证功能装饰器示例,包括了Python实现带参数的用户验证功能装饰器示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现带参数的用户验证功能装饰器。分享给大家供大家参考,具体如下: 运行结果: {'username': None, 'login': False} filedb 一脸蒙蔽的验证方式 欢迎来到主页 {'username'

  • 主要内容:带参数的函数装饰器,函数装饰器可以嵌套前面章节中,我们已经讲解了 Python 内置的 3 种函数装饰器,分别是 @staticmethod、@classmethod 和 @property,其中 staticmethod()、classmethod() 和 property() 都是 Python 的内置函数。 那么,函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: 实际上,上面