暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python函数装饰器基础举例

原创 梯阅线条 2023-12-23
110

1 Python函数装饰器基础举例

1.1 用@staticmethod统计实例数

描述

@staticmethod后接def funcname,

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

示例

>>> 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__方法被调用时,会调用被装饰函数,从而达到函数装饰器的效果。

示例

>>> 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

2 END

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

文章转载自梯阅线条,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论