当前位置: 首页 > news >正文

滕滕州网站建设住房和建设局官网

滕滕州网站建设,住房和建设局官网,怎么建设物流网站,网站内容建设 发布形式pluggy的hook调用,最重要的就是使用了__call__魔法函数,这个函数能够在我们调用实例时,自动调用这个函数,无需自己手动调用。 前面介绍了各个类的方法,这里简述下pluggy的调用流程(主要介绍主流程&#xff…

pluggy的hook调用,最重要的就是使用了__call__魔法函数,这个函数能够在我们调用实例时,自动调用这个函数,无需自己手动调用。
前面介绍了各个类的方法,这里简述下pluggy的调用流程(主要介绍主流程,分支处理忽略)。
前面我们介绍了HookspecMarker和HookimplMarker这两个类,这两个类是用来作装饰器用的,spec相当于接口类,impl为实现类。我们这边还用之前的例子,来介绍下插件的注册调用流程。

import pluggyspec_test = pluggy.HookspecMarker('test11')
impl_test = pluggy.HookimplMarker('test11')class Spec:@spec_testdef pluggy_test(self, arg1):print(f'this is spec test and arg is {arg1}')passclass Impl1:@impl_testdef pluggy_test(self, arg1):print(f'this is test1 and arg is {arg1}')return arg1class Impl2:@impl_testdef pluggy_test(self, arg1):print(f'this is test2 and arg is {arg1}')return -1 * arg1pm = pluggy.PluginManager('test11')
pm.add_hookspecs(Spec)
pm.register(Impl1())
pm.register(Impl2())
res = pm.hook.pluggy_test(arg1=1)

pluggy.PluginManager(‘test11’)调用后实例化一个pm,注册执行流程都依靠pm管理。
add_hookspecs(Spec)在pm中增加一个spec。
在这里插入图片描述
这个方法中最重要的就是实例化了一个HookCaller的对象,并且把它放到self.hook中。
然后调用pm.register(Impl1())注册 插件
在这里插入图片描述
注册方法中比较重要的就是实例化了一个hookimpl对象,并且把它添加到hook中,具体看就是添加到_hookimpls的list中(整体在我们上面添加的HookCaller下)。
在这里插入图片描述
接下继续注册第二个插件Impl2,注意hook添加spec时,是按照方法名添加的。impl1和impl2中两个方法名是一样的,所以不会添加新的name来存放impl2下的pluggy_test。Impl2的pluggy_test也和impl1的pluggy_test注册在同一个HookCaller下。
最后调用 pm.hook.pluggy_test(arg1=1)来执行插件。这里的pluggy_test就是HookCaller对象(add_hookspecs步骤)。因为HookCaller类中有__call__函数,所以调用该对象时,会自动调用该方法。
在这里插入图片描述
执行方法就是最下面这行。_hookexec方法即是我们初始化HookCaller传入的。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
即我们在执行pm.hook.pluggy_test(arg1=1)的时候调用的_multicall方法执行插件方法。
这就是pluggy的整体注册调用流程,细节部分可结合前后文一起看下。

http://www.dtcms.com/a/403307.html

相关文章:

  • Vue调用本地EXE程序
  • Vue2 全局事件总线:通俗易懂 + 简单案例
  • Flask模板中使用Vue、ant-design-vue、@ant-design/icons-vue示例模板
  • 石狮建设局网站保定网站建设系统
  • vLLM PD分离推理服务配置指南
  • C++ 学习与 CLion 使用:(十五)多文件编程,和C语言一样的多文件编程
  • BEAT币
  • 淘宝的网站怎么做公司网站如何被收录
  • Ansible实现自动化运维
  • Zabbix7.4.8(三):通过Zabbix agent 2监控Docker相关指标
  • 小型个人网站制作网页打不开的原因及解决方法
  • Ansible 入门到实战:自动化运维的瑞士军刀
  • 嵌入式学习---(linux驱动)
  • k8s集群与gitlab registry连接
  • MySQL笔记---对表的操作
  • 【实战避坑】MySQL修改表字段长度完整指南:从语法、锁表机制到在线DDL详解
  • 乐峰网网站是谁做的海门住房和城乡建设局网站
  • 做公司简介的开源网站做网站推广前途
  • 了解学习Nginx反向代理与缓存功能
  • 【黑马程序员】后端Web基础--Maven基础和基础知识
  • Linux系统Nginx服务(三)
  • 新手向 算法 基数排序-yang
  • 怎么搭建php网站网页设计个人网站设计
  • 小淇云库-Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
  • 芋道源码 - RabbitMQ + WebSocket 实现分布式消息推送
  • Spring Data JPA 语法详解与使用案例
  • 网站开发面试题天津公司建设网站
  • 个人怎么做音乐网站网页设计与制作教程刘瑞新课后答案
  • noi-9月23日作业
  • 购物网站每个模块主要功能怎么免费搭建网站