Python函数装饰器基础举例
2023-12-19 01:00:51
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
文章来源:https://blog.csdn.net/sinat_34735632/article/details/135073701
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!