python类装饰器即__call__方法
上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器
1.类中的__call__方法:
我们在定义好一个类后,实例化出一个对象,如果对这个对象以直接在后边加括号的方式进行调用,程序就会报错。也就是在类中这种做法是错误的;
而,如果一个类中写入了__call__方法,当我问在对实例对象以括号的方式进行调用时,__call__方法中的语句就会被执行,代码如下:
1 import time 2 # 定义一个Time类 3 class Time(object): 4 def __init__(self,a): 5 self.a = a 6 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类 class Time(object): def __init__(self,func): # 注意这里要设定参数接收Test self._func = func def __call__(self): print('我可以对函数进行装饰') print("----------------------------") self._func() @Time # 等价于 Test = Time(Test) def Test(): print('测试一下可不可以.') Test() #结果为: #我可以对函数进行装饰 #---------------------------- #测试一下可不可以.