系统学习Python——装饰器:函数装饰器-[对方法进行装饰:使用嵌套函数装饰方法]

分类目录:《系统学习Python》总目录


如果想要函数装饰器在简单函数和类级别的方法上都能工作,最直接的解决办法在于使用前面文章介绍的状态保持方案之一:把自己的函数装饰器编写为嵌套的def,这样你就不会陷入单一的self实例参数既是包装器类实例,又是主体类实例了的困境。

如下的替代方案用Python3.X的非局部变量进行了修补;如果要在Python2.X下使用,则可以重新编写它,为可更改的calls状态变量使用函数属性。由于被装饰的方法重新绑定到了简单函数而不是实例对象,所以Python正确地传递了Person对象作为第一位参数,并且装饰器将其从*args中的第一项传递给真正被装饰方法的self参数:

def tracer(func):calls = 0def onCall(*args, **kwargs):nonlocal callscalls += 1print('call %s to %s' % (calls, func.__name__))return func(*args, **kwargs)return onCallif __name__ == '__main__':@tracerdef spam(a, b, c):print(a + b + c)@tracerdef eggs(N):print(2 ** N)span(1, 2, 3)span(a=4, b=5, c=6)print(eggs(32))class Person:def __init__(self, name, pay):self.name = nameself.pay = pay@tracerdef giveRaise(self, percent):self.pay *= (1.0 + percent)@tracerdef lastName(self):return self.name.split()[-1]print('methods...')bob = Person('Bob Smith', 50000)sue = Person('Sue Jones', 100000)print(bob.name, sue.name)sue.giveRaise(0.1)print(sue.pay)print(bob.lastName(), sue.lastName())

我们还在一个__name__测试下缩进了文件的自测试代码,这样装饰器就能够在其他地方导人和使用。这个版本在函数和方法上都有效,但由于其使用了nonlocal,它只能在Python3.X中运行:
输出结果我们可以跟踪运行这些结果,以确保我们能够驾驭这一模型;后面的文章还将提供了它的一个支持类的替代方案,但是更为复杂。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

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

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

相关文章

【unity学习笔记】捏人+眨眼效果+口型效果

一、vriod捏人 1.在vroidstudio软件中捏人 2.导出模型(.vrm) 二、vrid导入unity的插件 1.在Git上搜索、打开univrm。 2.找到release页面找到合适的插件版本。(VRM-0.116.0_0f6c) 3.将univrm导入到工程中(assets)。 三…

前端显示json格式化

实现效果 在前端页面上展示格式化的JSON数据可以通过以下步骤完成: 获取JSON数据:首先,你需要获取要展示的JSON数据。你可以从后端API获取数据,或者直接在前端定义一个JSON对象。 格式化JSON:使用JavaScript的JSON对…

微服务雪崩问题及解决方案

雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。 如果服务提供者A发生了故障,当前的应用的部分业务…

C++初阶------------------入门C++

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

【LMM 007】Video-LLaVA:通过投影前对齐以学习联合视觉表征的视频多模态大模型

论文标题:Video-LLaVA: Learning United Visual Representation by Alignment Before Projection 论文作者:Bin Lin, Yang Ye, Bin Zhu, Jiaxi Cui, Munan Ning, Peng Jin, Li Yuan 作者单位:Peking University, Peng Cheng Laboratory, Sun …

TCP中的三次握手和四次挥手

TCP中的连接和断开可以说是在面试中经常被问到的问题之一,正好有空就总结一下,首先回顾一下TCP的相关知识点 1. TCP的基础知识 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。面向连接的,指的就是在两个进程发送数据…

简单FTP客户端软件开发——JavaFX开发FTP客户端

文章目录 导入外部包commons-net-3.10.0.jarJavaFX开发客户端 FTP客户端要求如下: 简单FTP客户端软件开发 网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。而文件传送协议FTP是因特网上使用得最广泛的文件传送协议。FTP使用…

手机摄影学习

手机摄影学习 基础知识1,成像基本原理2,什么是焦距3,快门(简称s)4,上面功能之间的相互影响5,焦点6,过爆、欠曝7,cmos(感光芯片)、测光、聚焦&…

2023年“中银杯”安徽省网络安全B模块(部分解析)

前言 以下是2023年中银杯安徽省网络安全B模块题目,镜像可以私聊我 B模块安全事件响应/网络安全数据取证/应用安全(400 分) B-1:CMS网站渗透测试 任务环境说明: √服务器场景:Server2206(关…

java SSM拖拉机售后管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM拖拉机售后管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源 代码和数据库,系统主要…

raid解析

raid原理是把各个硬盘组成一个组,是磁盘的集合,按照排列组合的方法给raid去不同的名字。 raid 0磁盘 读写性能都提高 在什么情况下使用1快盘raid 0 ? 实际利用率 100% 系统中要不然都做raid 要不然都不做raid 当前6快盘都是raid 但是…

es简单入门

星光下的赶路人star的个人主页 努力努力再努力 文章目录 1、简介2、使用场景3、基本知识4、中文文档和官网链接5、增删改查(php代码)6、基本查询7、HTTP操作7.1 索引操作7.1.1 创建索引 7.2 文档操作7.2.1 创建文档7.2.2 查看文档7.2.3 修改文档7.2.4 修…

NLP:预测新闻类别 - 自然语言处理中嵌入技术

简介 在数字时代,在线新闻内容呈指数级增长,需要有效的分类以增强可访问性和用户体验。先进机器学习技术的出现,特别是在自然语言处理(NLP)领域,为文本数据的自动分类开辟了新的领域。本文[1]探讨了在 NLP …

基于EMD的滚动轴承故障诊断算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1EMD的基本原理 固有模态函数(IMF) 筛分过程 4.2 基于EMD的滚动轴承故障诊断算法 信号预处理 EMD分解 特征提取 故障诊断 5.算法完整程序工程 1.算法运行效…

SpringBoot 实现Execl 导入导出

1、引包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easy…

【复现】FreeU以及结合stable diffusion

code&#xff1a;GitHub - ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net 才发现AnimateDiff更新v3了&#xff0c;以及又发了篇CVPR的改进工作&#xff1a; 在这个版本中&#xff0c;我们通过域适配器LoRA对图像模型进行了微调&#xff0c;以便在推理时具有更大的灵…

MySQL 高级(进阶) SQL 语句

目录 一、实验环境准备 二、MySQL高阶查询 1、语句与命令 2、实验实操 三、MySQL函数 1、语句与命令 2、实验操作 一、实验环境准备 #创建两个数据表&#xff0c;为实验提供环境&#xff1a; use kgc; #选择数据库&#xff0c;有则直接使用 无则按照以下步骤自建即可…

WPF+Halcon 培训项目实战(8-9):WPF+Halcon初次开发

文章目录 前言相关链接项目专栏运行环境匹配图片WPF Halcon组件HSmartWindowControlWPF绑定读取图片运行代码运行结果 抖动问题解决运行结果 绘制矩形绘制图像会消失 绘制对象绑定事件拖动事件 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想…

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…

Self-attention学习笔记(Self Attention、multi-head self attention)

李宏毅机器学习Transformer Self Attention学习笔记记录一下几个方面的内容 1、Self Attention解决了什么问题2、Self Attention 的实现方法以及网络结构Multi-head Self Attentionpositional encoding 3、Self Attention 方法的应用4、Self Attention 与CNN以及RNN对比 1、Se…