50 Python - 装饰器 类定义装饰器

04 类定义装饰器

      上节通过函数定义装饰器,本节通过类定义装饰器

001 定义类装饰器

定义一个类,类里面两个函数,一个构造函数init(),一个调用函数call()

构造函数init时候,传递一个函数func()进来

      调用函数call(),用于装饰传递进来的函数

用装饰器类P修饰get_text()函数

 

 

用装饰器类P修饰get_upper_text()函数

 

 

002 函数定义的装饰器和类定义装饰器区别

      函数定义装饰器:即可以用在普通函数上面,也可以用在类里面的方法上面

      类定义装饰器,可以用在普通函数上,但是用在其他类的方法上可能会有问题

(1)

 

 

调用

 

 结果

 

 

 

 

 调用

 

 结果

 

 

原因是,我们定义装饰器时候用到了一个参数self,然后当你传递一个student实例时候,student实例里面也有一个self,这样就起了冲突,不清楚self给谁用,其实是给装饰器用的

该问题该如何解决,可以解决但较复杂,可以自己研究,建议两种装饰器的定义根据情况选择,个人建议使用函数定义就可以了。

如下图,装饰器类里面有sslf,学生类里面也有self

 

 

posted @ 2019-07-10 18:47  艺杰兮  阅读(631)  评论(0)    收藏  举报