Python函数装饰器基础举例

news/2024/7/24 2:16:51 标签: python

1 Python函数装饰器基础举例

1.1 用@staticmethod统计实例数

描述

@staticmethod后接def funcname,

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

示例

python">>>> class CountInsBISM:
    numOfInstances=0
    def __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__方法被调用时,会调用被装饰函数,从而达到函数装饰器的效果。

示例

python">>>> class mycall:
    def __init__(self,func):
        self.calls=0
        self.func=func
    def __call__(self,*args):
        self.calls+=1
        print('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.niftyadmin.cn/n/5274139.html

相关文章

贵州移动:5G技术赋能,打开“智慧矿山”建设新思路

近日,贵州省大数据发展管理局、贵州省通信管理局通报了第六届“绽放杯”5G应用征集大赛贵州区域赛决赛获奖情况,由中国移动贵州分公司与贵州省黔云集中招标采购服务有限公司、贵州息烽磷矿有限责任公司联合打造的“基于5G技术的息烽磷矿信息化建设服务项…

〖大前端 - 基础入门三大核心之JS篇(57)〗- 继承

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…

Androidstudio加载编译时kotlin-compiler-embeddable一直下载中

打开网址 https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.6.10/ 1.下载jar包 2.配置下载jar文件到.gradle文件中 文件路径:/Users/“用户名”/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embedd…

❀My虚拟机上的ftp服务器搭建(centos)❀

❀My虚拟机上的ftp服务器搭建(centos)❀ 在CentOS上搭建FTP服务器可以使用vsftpd软件,下面是详细的搭建教程: ①安装vsftpd软件 在终端中输入以下命令进行安装: sudo yum install vsftpd ②配置vsftpd 打开vsftpd的配置文件,…

2023.12.19力扣每日一题

2023.12.19 题目来源我的题解方法一 暴力法方法二 二分查找 题目来源 力扣每日一题;题序:1901 我的题解 方法一 暴力法 对于每一个点都判断四周是否比自己小,若是则直接返回该点坐标,否则继续寻找。 时间复杂度: O(…

当在HBuilderx中运行项目,运行微信开发者工具时,报错

当在HBuilderx中运行项目时 选择在小程序运行,如果报错 打开微信开发者工具检查一下服务端口,打开服务端口 然后重新运行。就OK了

桥接虚拟机设置上网步骤

一. Vmware设置 虚拟机设置 > 网络适配器 > 网络连接 > 桥接模式 二. 虚拟系统网格设置 vim /etc/sysconfig/network-scripts/ifcfg-ens33 NAMEens33 #文件名 DEVICEens33 #设备名 ONBOOTyes #是否在启动时激活,…

基于Vue的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统,来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术,MYSQL数据库存储数据,基于SSMVue框架开发。在网站的整个开发过程中,首先对…