类的类装饰器简单实现思路及案例

☞ ░ ░

一、引言

在《》介绍了Python装饰器的四种类型:函数的函数装饰器、类的函数装饰器、函数的类装饰器、类的类装饰器,并针对网上没有公开资料的类的类装饰器给出了实现方法。昨晚仔细想了一下,应该还有一种其他实现方法,早上一测试发现确实可以,并且方案比上文的方案更简单,因此在此单独介绍一下。

二、实现思路

这个方法的实现需要遵循如下要点:

  1. 装饰器类必须实现至少两个实例方法,包括__init__和__call__;
  2. 在装饰器类的构造方法的参数包括self,wrapedClass,*a,**k,其中wrapedClass代表被装饰类,a代表被装饰类构造方法的位置参数,k代表被装饰类构造方法的关键字参数;
  3. 在装饰器类的构造方法中用实例变量(例如self.wrapedClass)保存wrapedClass类;
  4. 在装饰器类的__call__方法中调用self.wrapedClass(*a,**k)创建被装饰类的一个对象,并返回该对象。

按照以上步骤创建的类装饰器,就可以用于装饰其他类。

三、案例

案例还是上文类似的案例,只是换成了本文的实现方法:

执行结果:

四、小结

本文介绍了类的类装饰器的另一种简单实现思路,其实无论是本文的实现思路还是上面引文的实现思路,案例都只能保障类对象的创建被装饰,如果需要对类的方法进行装饰,还需要单独的处理,我们将在后面的文章中进一步介绍。

写博不易,敬请支持:

关于老猿的付费专栏

  1. 付费专栏《专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 》;
  2. 付费专栏《)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《》;
  3. 付费专栏《》为《》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《》。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python!

☞ ░ ░

经验分享 程序员 微信小程序 职场和发展