Python装饰器管理类和函数

1 Python装饰器管理类和函数

Python装饰器可以管理函数和实例的调用,也可以直接管理函数和类本身。

1.1 装饰器将函数和类保存到字典

描述

通过装饰器将函数或类保存到字典,以便后续使用。

(1) 定义一个字典;

(2) 定义一个装饰器,将装饰的函数或类保存到字典;

(3) 装饰器不调用函数或类,直接返回函数或类;

(4) 通过字典访问保存的函数或类;

示例

>>> registry={}
>>> def register(obj):registry[obj.__name__]=objreturn obj>>> @register
def testadd(a,b):return a+b>>> @register
def testsub(a,b):return a-b
>>> @register
class TestMul:def __init__(self,a,b):self.mul=a*bdef __str__(self):return str(self.mul)>>> for k in registry:print(k,'->',registry[k],type(registry[k]))testadd -> <function testadd at 0x000001B92C23BAF0> <class 'function'>
testsub -> <function testsub at 0x000001B92C2FC040> <class 'function'>
TestMul -> <class '__main__.TestMul'> <class 'type'>>>> for k in registry:print(k,'=>',registry[k](5,2))testadd => 7
testsub => 3
TestMul => 10

1.2 装饰器为函数添加属性

描述

通过装饰器为装饰函数添加属性,以便后续使用。

(1) 定义一个装饰器;

(2) 为装饰函数添加属性,内部给属性值,或者外部送入属性值;

(3) 返回装饰函数;

(4) 访问装饰器函数添加的属性;

示例

>>> def markdeco(func):func.marked=Truereturn func>>> @markdeco
def testmul(a,b):return a*b>>> testmul.marked
True
>>> def myannotate(note):def notedeco(func):func.lab=notereturn funcreturn notedeco
>>> @myannotate('梯阅线条')
def testsub(a,b):return a-b>>> testsub.lab
'梯阅线条'
>>> testsub(5,2)
3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程

文章目录 注册杂项设备驱动模块传参注册字符设备 开发环境&#xff1a; windows ubuntu18.04 迅为rk3568开发板 注册杂项设备 相较于字符设备&#xff0c;杂项设备有以下两个优点: 节省主设备号:杂项设备的主设备号固定为 10&#xff0c;在系统中注册多个 misc 设备驱动时&…

【分布式技术】监控平台zabbix自定义模板、设置邮件报警、导入模板

目录 案例&#xff1a;监控当前登录人数&#xff0c;超过3人触发报警发送邮件 第一步&#xff1a;自定义模板 1、明确想要获取监控数据的命令和脚本 ​编辑 2、在被监控主机上&#xff0c;修改zabbix agent2的配置文件或者在zabbix agent2的配置文件目录中添加以.conf结尾…

三棋先手必胜证明

目录 创作原因 游戏规则 初始状态图 证明过程 先手必胜的证明 失败的博弈树&#xff08;三个多小时的成果&#xff09; 创作原因 这个棋不是网上流行的成三棋&#xff0c;我也不知道这个棋叫什么。由于这个棋是&#xff08;横竖斜&#xff09;连成三个就获胜&#xff0c;…

GBASE南大通用数据库如何检索单行

SELECT 语句返回的行集是它的活动集。单个 SELECT 语句返回单个行。您可使用嵌入式 SELECT 语句来从数据库将单个行检索到主变量内。然而&#xff0c;当 SELECT 语句返回多行数 据时&#xff0c;程序必须使用游标来一次检索一行。在 检索多行 中讨论“多行”选择操作。 要检索单…

虹软人脸识别白屏

1.修改jdk为1.8 2.编译版本ndk修改 ndk {abiFilters armeabi-v7a, arm64-v8a} 3.local.properties增加ndk路径 ndk.dirH\:\\Android\\SDK\\ndk\\21.1.6352462 4.最重要的一步:检查依赖库是否存在前一定要先检查有么有读取本地文件权限,下面的代码即使是放到点击事件的回调…

[AutoSar]BSW_OS 01 Autosar OS入门(一)

目录 关键词平台说明一、Autosar OS 的位置二、Autosar OS 与OSEK三、TASK 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、Autosar OS 的位置 如在[AutoSar]基础部分 a…

RuoYi-Vue-Plus 5.X登录前流程及解密

一&#xff1a;问题 1. 前端传给后端的是一个加密字符串&#xff0c;后端controller层login接口怎么就直接解密了呢&#xff1f; 2. 中间经过什么步骤到达的登录接口呢&#xff1f; 二&#xff1a;个人分析 首先考虑的是拦截器、过滤器、切面AOP&#xff1b; 1. 使用全文搜…

代码随想录算法训练营第十七天| 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

513.找树左下角的值 public int findBottomLeftValue(TreeNode root) {List<Integer> path new ArrayList<>();List<List<Integer>> ans new ArrayList<>();Boolean[] flag new Boolean[1];flag[0] true;dfs(root, path, ans, flag);int ma…

面向对象的三大特性

个人主页&#xff1a;告别&#xff0c;今天 个人专栏&#xff1a;java趣味之旅 ​​​​​​​本专栏旨在分享学习网络编程的学习心得和复习总结&#xff0c;欢迎大家在评论区交流讨论 1. 封装 1.1 封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象…

计算机msvcp140.dll丢失如何解决,分享3个简单有效的方法

在计算机系统运行过程中&#xff0c;用户有时会遇到一个常见的错误提示——msvcp140.dll文件缺失&#xff0c;这一问题的发生往往会导致部分软件无法正常启动或运行。“针对计算机系统中出现的msvcp140.dll缺失问题&#xff0c;小编将详尽阐述并探讨5种有效的解决策略。每一种方…

go怎么结束很多个协程呢

在Go语言中&#xff0c;可以通过使用context来结束多个协程。context包提供了用于跟踪、取消和传递截止日期的机制&#xff0c;可用于协程的生命周期管理。 以下是一个使用context取消多个协程的示例&#xff1a; package mainimport ("context""fmt"&qu…

基于springboot+html的汽车销售管理系统设计与实现

基于springboothtml的汽车销售管理系统 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 前言 随着汽车市场的快速发展&#xff0c;汽车销售企业面临着越来越大的管理…

Redis 内存碎片

一、Redis 内存碎片内存碎片是指在内存分配的时候&#xff0c;产生的不能重复利用的空间。例如&#xff0c;内存空间还有3K&#xff0c;应用程序想申请连续的3K空间&#xff0c;虽然内存空间够&#xff0c;但是空间分配为2K,1K&#xff0c;总空间够&#xff0c;但是不连续&…

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长&#xff0c;时间紧迫的同学可以看情况进行缩减。个人认为做题&#xff0c;尤其是解析齐全的题最重要&#xff01; 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料&#xff08;都可自行找到免费资源&#xff09; 视频知识点讲…

R2机器人加载棋盘与棋子模型,对urdf、sdf的解释(区分srdf)

1、概述 urdf、sdf、srdf文件都属于xml的规范格式&#xff0c;解释分别如下&#xff1a;urdf(unified robot description format)叫做"统一机器人描述格式"&#xff0c;主要目的就是提供一种尽可能通用的机器人描述规范&#xff0c;这样对于机器人的描述就可以互相移…

恭喜:ChatGPT之父与相恋多年的男友结婚,并希望早日生娃。。。

OpenAI CEO Sam Altman与伴侣Oliver Mulherin海边私密婚礼&#xff1a;爱情、事业与人工智能领域的交织 婚礼主持人是奥特曼的兄弟杰克奥尔特曼 壹.媒体流传 在科技界掀起波澜的OpenAI首席执行官萨姆奥尔特曼&#xff08;Sam Altman&#xff09;&#xff0c;近期与他长久以来的…

Opencv实验合集——实验九:姿势估计

在上一章节(相机校准)&#xff0c;你已经找到了相机矩阵&#xff0c;畸变系数等等参数。给出一个图案图像&#xff0c;我们便可以利用上面的信息用于计算其姿势&#xff0c;或者物体在空间中位于何处&#xff0c;比如如何旋转&#xff0c;如何移动等等问题。对于一个平面物体&a…

Java - FFM API 实现扫雷助手

文章目录 前言环境思路实现扫雷常量高度/宽度/雷数地图基址 屏幕坐标 效果资源 前言 使用 FFM API 实现扫雷助手. 环境 Win11 JDK 21 思路 读取扫雷地图数据判断该数据是否为雷模拟鼠标点击重复上面操作遍历地图直至完成 确定了思路&#xff0c;那么就要确认 windows 系…

Rust-模式解构

match 首先&#xff0c;我们看看使用match的最简单的示例&#xff1a; exhaustive 有些时候我们不想把每种情况一一列出&#xff0c;可以用一个下划线来表达“除了列出来的那些之外的其他情况”&#xff1a; 下划线 下划线还能用在模式匹配的各种地方&#xff0c;用来表示…

Java+Mysql存储过程生成订单序列号

Mysql存储过程生成唯一订单号 直接上代码&#xff01;&#xff01; 1.创建存储过程 CREATE DEFINERrootlocalhost PROCEDURE getOrderSerialNo(# 前缀in orderPrefix varchar(64), # 返回结果out result int) BEGIN# 当前流水号declare curOrderNo int;# 默认值为0declare e…