上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器
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()#结果为:#我可以对函数进行装饰#----------------------------#测试一下可不可以.