python 类方法装饰器_python类装饰器即__call__方法

上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器

1.类中的__call__方法:

我们在定义好一个类后,实例化出一个对象,如果对这个对象以直接在后边加括号的方式进行调用,程序就会报错。也就是在类中这种做法是错误的;

而,如果一个类中写入了__call__方法,当我问在对实例对象以括号的方式进行调用时,__call__方法中的语句就会被执行,代码如下:

1 importtime2 #定义一个Time类

3 classTime(object):4 def __init__(self,a):5 self.a =a6 def __call__(self, *args, **kwargs):7 print(self.a )8 #对类进行实例化

9 now =time.ctime()10 c =Time(now)11 #调用类中的call方法

12 c()13 #结果为:Tue Jun 12 17:28:53 2018

2.类作为装饰器的底层原理和上一篇中所谈到的是一致的,以下边代码为示例:

#定义一个Time类

classTime(object):def __init__(self,func): #注意这里要设定参数接收Test

self._func =funcdef __call__(self):print('我可以对函数进行装饰')print("----------------------------")

self._func()

@Time#等价于 Test = Time(Test)

defTest():print('测试一下可不可以.')

Test()#结果为:#我可以对函数进行装饰#----------------------------#测试一下可不可以.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值