首页 > 其他分享 >钩子(hook)函数与装饰器

钩子(hook)函数与装饰器

时间:2023-05-17 14:44:20浏览次数:27  
标签:函数 修改 钩子 hook 或类 装饰 定义

在Python中,钩子函数(Hook Function)和装饰器(Decorator)是两种不同的概念和用法。

钩子函数(Hook Function)是一种允许在特定事件发生时执行自定义代码的函数。这些事件可以是程序的不同阶段、特定条件的满足、或者其他特定的触发点。钩子函数通常用于扩展或修改现有代码的行为,提供了一种可插入的机制。

举个例子,假设你正在开发一个应用程序,其中某个函数在特定条件下需要执行一些额外的操作。你可以定义一个钩子函数,将其注册到特定的事件或条件上,以便在需要的时候自动执行。钩子函数的执行由程序控制,你可以自由选择何时调用它们。

装饰器(Decorator)是一种特殊的语法构造,用于修改或扩展函数或类的行为。装饰器函数接受一个函数作为参数,并返回一个新的函数或类。通过在函数或类的定义前加上装饰器,可以改变它们的行为、添加额外的功能或修改其属性。

装饰器通常以 @decorator 的形式应用于函数或类定义上,使得装饰器函数的逻辑能够被应用到被装饰对象上。装饰器可以用于许多不同的用途,例如添加日志记录、验证输入、缓存结果等。

区别总结如下:

钩子函数是在特定事件发生时执行自定义代码的函数,通常用于扩展或修改现有代码的行为。
装饰器是一种特殊的语法构造,用于修改或扩展函数或类的行为,通过将装饰器函数应用于函数或类定义上。
钩子函数的执行由程序控制,可以自由选择何时调用它们。
装饰器在定义函数或类时就被应用,对被装饰对象的行为进行修改。
钩子函数是一种更通用和自由度更高的机制,而装饰器是一种特定的语法构造。装饰器实际上也可以被看作是一种特殊形式的钩子函数。

eg:

标签:函数,修改,钩子,hook,或类,装饰,定义
From: https://www.cnblogs.com/code3/p/17408686.html

相关文章

  • 【git】报错解决方案-'pre -commit hook failed (add --no-verify to bypass)'
    git-commit报错: 可以看到这个报错有两点,第一点是因为npm缓存问题,第二点是pre-commit导致的commit报错pre-commit钩子都被存储在Git目录下的hooks子目录中。当你用gitinit初始化一个新版本库时,Git默认会在这个目录中放置一些示例脚本。这些脚本除了本身可以被......
  • wazuh告警通过webhook推送到飞书
    使用wazuh自带的shuffle脚本实现 步骤:1.进入:/var/ossec/integrations复制shuffle、shuffle.py两个文件,并重命名为:custom-feishu、custom-feishu.py备注:一定要按这个方式命名,自定义告警前,都要加custom2.编辑custom-feishu.py,修改generate_msg函数: 3.如果想看告警......
  • 3:闭包,装饰器,生成器,迭代器
    一:什么是闭包1:必须有一个内部函数2:外部函数返回值内部函数3:内部函数一定要调用外部函数的变量 二:什么是装饰器1:装饰器和闭包的区别闭包传递的是变量,装饰器传递的是函数,可以说装饰器是闭包的一种,它只是传递函数的闭包装饰器本质是一种函数,在原函数上增加新的功能。比......
  • Java设计模式-装饰模式
    简介装饰模式在Java领域是一种常见的设计模式,它能够在不改变对象原有结构的情况下,动态地为对象添加新的功能。它通过封装原有对象,在运行时动态地为对象添加新的行为或者修改原有行为,以扩展对象的功能。这种方式避免了继承的静态特性,让对象的行为可以根据需要进行动态变化。在装......
  • 装饰者模式
    目录装饰者模式概述结构案例使用场景JDK源码解析代理和装饰者的区别装饰者模式概述我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承......
  • React-hooks 父组件通过ref获取子组件数据和方法
    我们知道,对于子组件或者节点,如果是class类,存在实例,可以通过React.createRef()挂载到节点或者组件上,然后通过this获取到该节点或组件。classRefTestextendsReact.Component{constructor(props){super(props);this.myRef=React.createRef();}......
  • 装饰器的多种实现方式(二)
    基于类实现装饰器变体在之前的文章里有提过基于类实现的装饰器,这里做一下延申importtypesfromfunctoolsimportwrapsclassDecorator:def__init__(self,func):wraps(func)(self)self.calls=0def__call__(self,*args,**kwargs):......
  • react状态管理store用法二: 使用Hooks 配置redux
    react最通用的状态管理方案就是的redux,下面介绍通过Hooks的方式使用reduxnpminstallreact-redux@reduxjs/toolkit-S 创建store1.新建store文件夹,在下面新建index.tsx文件和slices文件夹,其中slices文件夹用来定义需要放进store的数据结构和方法slices文件夹下新建app......
  • python-flask 技能点使用-03 请求钩子实现审计日志
    场景分析     使用pythonflask开发web系统,该系统是基于用户认证鉴权的web系统,系统中涉及到关键数据的操作,因此需要针对业务操作进行记录(也就是审计日志),便于管理员后期查看,在基于java的Spring系列框架中我们可以借助于AOP面向切面的编程来完成,在使用Flask时可以借助......
  • python-flask 技能点使用-01 请求钩子
    场景分析     熟悉java开发的小伙伴应该了解Spring全生命周期以及配套的一系列方法,熟悉Vue开发的小伙伴们应该也熟悉Vue生命周期管理以及一系列方法,使用过Servlet的小伙伴也应该了解其生命周期的概念,本人之前一直从事java开发,现在因为业务需要需要学习python开发,目前......