Python函数装饰器基础举例

1 Python函数装饰器基础举例

1.1 用@staticmethod统计实例数

描述

@staticmethod后接def funcname,

效果等于 funcname=staticmethod(funcname),只是书写简洁一些。

示例

>>> class CountInsBISM:numOfInstances=0def __init__(self):CountInsBISM.numOfInstances+=1@staticmethod   # 等效于 printNumOfIns=staticmethod(printNumOfIns)def printNumOfIns():print('创建的实例数为:{}'.format(CountInsBISM.numOfInstances))
>>> cibs1,cibs2,cibs3=CountInsBISM(),CountInsBISM(),CountInsBISM()
>>> CountInsBISM.printNumOfIns()
创建的实例数为:3

1.2 用__call__实现函数装饰器

描述

Python的__call__运算符重载方法为类实例实现函数调用接口。

即,python类实例对象调用小括号()时,自动调用_call_()方法。

步骤

(1) 构造函数接收被装饰函数;

(2) 重载__call__方法,并且调用被装饰函数;

实例化类实例对象时会接收一个被装饰的函数,通过实例对象名调用小括号()时,会自动调用__call__方法,在__call__方法被调用时,会调用被装饰函数,从而达到函数装饰器的效果。

示例

>>> class mycall:def __init__(self,func):self.calls=0self.func=funcdef __call__(self,*args):self.calls+=1print('call {} to {}'.format(self.calls,self.func.__name__))self.func(*args)
#@mycall 
#def myecho
#等价于 myecho=mycall(myecho)
>>> @mycall
def myecho(msg):print(msg)
# myecho('梯阅线条') 会自动调用 mycall类的 __call__ 方法。
>>> myecho('梯阅线条')
call 1 to myecho
梯阅线条
>>> myecho('tyxt.work')
call 2 to myecho
tyxt.work

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

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

相关文章

设计模式——结构型

1.装饰器模式 要素:装饰器,装饰对象 为待装饰对象中某一结构特征添加内容,而不是新建一个特征 /*** 装饰对象*/ public interface Shape {public void draw(); } /*** 具体装饰对象*/ public class Circle implements Shape{private String…

计算机组成原理——校验码

计算机组成原理学习笔记——校验码-CSDN博客 校验码——海明码及码距,码距_海明码的码距是多少-CSDN博客 1 下列关于码距与检错与纠错能力的描述中正确的是 (ABC) (多选) A. 码距为1的编码不具备任何检错能力 B. 码…

社交网络分析4(上):社交网络链路预测分析、Logistic回归模型、LLSLP方法(LightGBM 堆叠链路预测)、正则化方法、多重共线性

社交网络分析4 写在最前面社交网络链路预测分析概述链路预测分析简介链路预测分析的重要性社交网络链路预测分析方法基于网络结构的方法基于节点属性的方法基于随机游走的方法基于深度学习的方法 基于相似性和基于似然性的链路预测方法基于相似性的方法基于邻居的方法基于路径的…

Linux shell编程学习笔记36:read命令

*更新日志 *2023-12-18 1.根据[美] 威廉肖特斯 (Willian shotts)所著《Linux命令行大全(第2版)》 更新了-e、-i、-r选项的说明 2.更新了 2.8 的实例,增加了gif动图 3.补充了-i的应用实例 2.1…

回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图) 目录 回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 &a…

01矩阵(课程F)

输入2个整数N和M,输出N行M列的的01数字矩阵。第1行第1个数是’1’,后面的数都和其左边或上面数相反(0和1称为相反)。例如:N4,M5时: 10101 01010 10101 01010 输入格式 第一行2个正整数:N和M&a…

【mysql】mysql的索引有哪些?聚簇索引和非聚簇索引又是个啥?

0 回答 聚簇索引 将数据存储与索引放到了一块,找到了索引也就找到了数据,当表有聚簇索引时,它的数据实际上存放在索引的叶子页上,也就是B树的叶子节点上,因为数据行不能存在两个地方,所以一个表只能有一个聚…

自清洗过滤器工作原理尺寸选型参数,内部结构,压差开关如何调节

​ 1:全自动自清洗过滤器设备介绍 全自动反冲洗过滤器是水净化过程中不可缺少的处理手段,用于拦截水中的各种杂质,以净化水质或保护系统中其他设备的正常工作。普通网式过滤器因其结构简单、过滤效果好、阻力小而广泛应用于水源过滤、工业循…

[RK-Linux] RK3399使用RK开源SPL,修改U-Boot为FIT打包方式,裁剪trust分区

文章目录 一、启动方式二、FIT打包三、RK3568相关配置参考四、RK3399支持与调试一、启动方式 RK3399平台根据前级Loader代码是否开源,目前有两套启动方式: // 前级loader闭源 BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL // 前级loader…

神经网络可以计算任何函数的可视化证明

神经网络可以计算任何函数的可视化证明 对于神经网络,一个显著的事实就是它可以计算任何函数。 如下:不管该函数如何,总有神经网络能够对任何可能的输入x,输出值f(x) 即使函数有很多输入和输出&#xff0…

货物数据处理,pandas和openpyxl联合处理

处理文件题头格式 部门名称 年度名称 季节名称 商品名称 商品代码 品牌名称 品类名称 颜色名称 商店名称 0M 1L 1XL 27 28 29 2XL 30 31 32 33 3XL 4XL 5XL 6XL S 均1.导入包 导入源 pip install openpyxl -i https://pypi.doubanio.com/simple pip install pandas -i https…

Git提交前的必备神器——自动清除调试语句脚本

说在前面 不知道大家有没有遇到这样一种情况,平时在写代码调试时有时候会使用到debugger,可能大部分时间在提交代码前会记得把debugger先删除,但可能也会存在将debugger提交上去的情况,那我们该怎么防止出现这种情况呢&#xff1f…

RLC防孤岛负载测试:电力系统安全运行的重要保障

在电力系统中,孤岛效应是一个严重的问题,它可能导致电力系统的不稳定甚至崩溃。为了确保电力系统的安全运行,必须进行RLC防孤岛负载测试。RLC防孤岛负载测试是一种模拟电网故障后,对电力系统进行检测的方法,主要用于检…

在 linux上运行 Scratch,找到了更github 的项目地址,而且找到了scratch的官方项目。

1,关于Scratch Scratch 是麻省理工学院的“终身幼儿园团队”发布的一种图形化编程工具, 主要面对全球青少年开放,所有人都可以在软件中创作自己的程序。 2,在linux 上面还真有个默认的 scratch 版本 但是太老旧了。 于是找了下…

天猫数据分析平台-天猫销售数据查询软件-11月天猫平台冲锋衣市场销售运营数据分析

随着气温逐渐下降,保暖服饰迎来热销,冲锋衣的需求大增。如今冲锋衣已经不仅仅是户外运动的装备,还成为很多年轻人的日常穿搭和时尚的追求。 新的穿搭趋势也带来了巨大的市场机会。据公开数据显示,中国有冲锋衣生产及经营企业超过8…

分布式事务--TC服务的高可用和异地容灾

1.模拟异地容灾的TC集群 计划启动两台seata的tc服务节点: 节点名称ip地址端口号集群名称seata127.0.0.18091SHseata2127.0.0.18092HZ 之前我们已经启动了一台seata服务,端口是8091,集群名为SH。 现在,将seata目录复制一份&…

消息队列-broker

在消息队列系统中,Broker(代理)是指消息队列的中间件服务器,负责接收、存储和转发消息。它充当了消息发送者和接收者之间的中间人,协调消息的传递和处理。 具体来说,Broker在消息队列中扮演以下角色&#…

9. DashBoard

9. DashBoard 文章目录 9. DashBoard9.1 部署Dashboard9.2 使用DashBoard 在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。 为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard)。 用户可以使用…

入门Linux操作系统,一定要学会这70个命令!

【关注微信公众号:跟强哥学SQL,回复“笔试”免费领取大厂SQL笔试题。】 一、文件和目录管理 ls:列出目录下的内容。 cd:改变当前目录。 pwd:显示当前工作目录。 mkdir:创建新目录。 rm:删除…

【计算机网络】TCP协议——2.连接管理(三次握手,四次挥手)

目录 前言 一. 建立连接——三次握手 1. 三次握手过程描述 2. TCP连接建立相关问题 二. 释放连接——四次挥手 1. 四次挥手过程描述 2. TCP连接释放相关问题 三. TCP状态转换 结束语 前言 TCP——传输控制协议(Transmission Control Protocol)。是一种面向连接的传…