当前位置: 首页 > 知识库问答 >
问题:

Python中的@error_wrap装饰器相当于什么?[重复]

羊舌自强
2023-03-14

python中某些函数的@error\u wrap是什么
例如下面的代码:

@error_wrap
def disconnect(self):
    """
    disconnect a client.
    """
    logger.info("disconnecting snap7 client")
    return self.library.Cli_Disconnect(self.pointer)

错误\u包装方法

def error_wrap(func):
    """Parses a s7 error code returned the decorated function."""
    def f(*args, **kw):
        code = func(*args, **kw)
        check_error(code, context="client")
    return f

我知道几个OOP修饰的python函数(例如@staticmethod、@classmethod、@abstractmethod等等),但我找不到@error\u wrap
这些代码中提到的等价物是什么?

共有1个答案

龚德本
2023-03-14

Python装饰器也是函数,但函数的第一个参数是其他函数。下面的代码与您的代码相同

def error_wrap(f):
    # do something with received function f, then return it

def disconnect(self):
    # implementation of your function

disconnect= error_wrap(disconnect) # <- notice the function `disconnect` isn't called

现在您想知道error_wrap函数是做什么的。我们不能回答这个问题,因为这只是另一个函数,所以你应该找到它并粘贴她的代码,然后我们会回答你的。

 类似资料:
  • 本文向大家介绍基于Python 装饰器装饰类中的方法实例,包括了基于Python 装饰器装饰类中的方法实例的使用技巧和注意事项,需要的朋友参考一下 title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] category: ['Python'] --- 目前在中文网

  • 我试图在我的类中添加属性装饰器,但出了问题。 我有6个错误!!! 我的代码:

  • 问题内容: 有没有办法像python风格那样装饰C ++中的函数或方法? 例如,使用宏: 要么 可能吗? 问题答案: 提供了我提出的解决方案的大多数构建块。 这是我建议的解决方案。 输出: ps 提供了一个可以进行功能调用以外的其他功能的地方。如果您想简单地传递至,可以使用:

  • 问题内容: 我想构造用作装饰器的类,并保留以下原则: 应该有可能在top 1函数上堆叠多个此类装饰器。 产生的函数名称指针应该与没有装饰器的相同函数没有区别,可能只是它是哪种类型/类。 除非装饰员实际要求,否则订购装饰员应该无关紧要。就是 独立的装饰器可以以任何顺序应用。 这是针对Django项目的,现在我正在处理的特定情况下,该方法需要2个装饰器,并显示为普通的python函数: @AutoTe

  • 问题内容: 我正在尝试学习装饰器。我了解它的概念,现在尝试实现它。 这是我编写 的代码,代码不言自明。它只是检查参数是否传入。 抛出错误的说法。我了解它未在下定义,但不知道如何纠正此代码?我要去哪里错了? 问题答案: 您的装饰器应如下所示: 需要注意的几点: 期望将类作为第一个参数(您可以将其替换为简单的try / except TypeError除外)。 包装器应返回一个函数,而不是被调用函数的

  • 问题内容: 假设我有一个名为的类,并且我想使用装饰器设计模式。如果我错了,请纠正我,但是要使其正常工作,我们需要创建一个装饰器类,例如,该类将保留对实例的引用,所有其他装饰器将对其进行扩展以添加功能。 我不明白为什么我们必须创建装饰器类而不是使用实例? 问题答案: 装饰器模式用于动态地(即在运行时)向对象添加功能。通常,在编写类时,对象将具有固定的功能。但是重要的一点是,对象的功能以对对象的客户端

  • 问题内容: 因此,我习惯于在Angular中使用工厂和服务。 我正在阅读Angular2文档,但看不到任何等效的工厂。Angular2的等效项是什么? 问题答案: 工厂,服务,常量和值都在Angular2中消失了。Angular2与经典Angular有根本性和根本性的不同。在Angular2中,核心概念是 组件 依赖注入 捆绑 服务,工厂,提供者和常量的概念在Angular 1中受到了批评。很难在

  • 问题内容: 基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)? 为了更具体一点,我将使用设计模式书中涉及咖啡饮料的示例: 有一个称为的抽象组件类 简单的饮料类型,例如简单扩展 为了装饰饮料,创建了一个抽象类,该类扩展并具有 假设我们要添加“牛奶”调味品,将创建一个扩展 我