04 类定义装饰器
上节通过函数定义装饰器,本节通过类定义装饰器
001 定义类装饰器
定义一个类,类里面两个函数,一个构造函数init(),一个调用函数call()
构造函数init时候,传递一个函数func()进来
调用函数call(),用于装饰传递进来的函数
用装饰器类P修饰get_text()函数
用装饰器类P修饰get_upper_text()函数
002 函数定义的装饰器和类定义装饰器区别
函数定义装饰器:即可以用在普通函数上面,也可以用在类里面的方法上面
类定义装饰器,可以用在普通函数上,但是用在其他类的方法上可能会有问题
(1)
调用
结果
调用
结果
原因是,我们定义装饰器时候用到了一个参数self,然后当你传递一个student实例时候,student实例里面也有一个self,这样就起了冲突,不清楚self给谁用,其实是给装饰器用的
该问题该如何解决,可以解决但较复杂,可以自己研究,建议两种装饰器的定义根据情况选择,个人建议使用函数定义就可以了。
如下图,装饰器类里面有sslf,学生类里面也有self