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

python+win32+ie浏览器操作 本来的打算是写一个脚本,能够自动登陆土豆账号,于是就百度标题,找到了一些做法,照葫芦画瓢死活不对。 主要代码可以参考链接: https://www.baidu.com/link?url=9MujwNCZ47BW8lruNbVqTbjcxFszmP-AQxM_9j0M7Jav-k61z-N57WsfjyEcwL0EqCiux9i17TspbQk0w1bQ1K&wd=&eqid=bbae62420 阅读详情
☞ ░ 前往老猿Python博客 https://blog.youkuaiyun.com/LaoYuanPython ░

一、引言

在《https://blog.youkuaiyun.com/LaoYuanPython/article/details/111303395:你不一定全知道的四种Python装饰器实现详解 》介绍了Python装饰器的四种类型:函数的函数装饰器、类的函数装饰器、函数的类装饰器、类的类装饰器,并针对网上没有公开资料的类的类装饰器给出了实现方法。昨晚仔细想了一下,应该还有一种其他实现方法,早上一测试发现确实可以,并且方案比上文的方案更简单,因此在此单独介绍一下。

二、实现思路

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

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

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

三、案例

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

class decorateClass:
    def __init__(self,wrapedClass,*a,**k):
        print("准备执行被装饰类初始化")
        self.wrapedClass=wrapedClass
        print("被装饰类初始化完成")

    def __call__(self, *a, **k):
        print("被装饰类对象初始化开始")
        wrapedClassObj = self.wrapedClass(*a,**k)
        print("被装饰类对象初始化结束")
        return wrapedClassObj

@decorateClass
class car:
    def __init__(self,type,weight,cost):
        print("class car __init__ start...")
        self.type = type
        self.weight = weight
        self.cost = cost
        self.distance = 0
        print("class car __init__ end.")

    def driver(self,distance):
        self.distance += distance
        print(f"{self.type}已经累计行驶了{self.distance}公里")
        print("老猿Python博客文章目录:https://blog.youkuaiyun.com/LaoYuanPython/article/details/109160152,敬请关注同名微信公众号")
c = car('爱丽舍','1.2吨',8)
c.driver(10)
c.driver(110)

执行结果:

准备执行被装饰类初始化
被装饰类初始化完成
被装饰类对象初始化开始
class car __init__ start...
class car __init__ end.
被装饰类对象初始化结束
爱丽舍已经累计行驶了10公里
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/109160152,敬请关注同名微信公众号
爱丽舍已经累计行驶了120公里
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/109160152,敬请关注同名微信公众号

四、小结

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

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

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

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

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

跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░
PYTHON装饰器详解 此语法糖在Python使用极其广泛,Python开发必备技能之一,常见使用于日志,性能检测,权限判断等。用于增强扩展Python函数或类功能的一种语法糖,类似与装饰者模式,还具备解耦的功能。可调用对象一般用于单个装饰器代码较为复杂的情况,需要独立成一个类来进行编写。类装饰器用于对现有类修改功能或新增功能,例如对一个类添加额外的属性与方法。装饰器类有两种写法,分别用于不同的场景。函数装饰器分为两种,不带参数的与带参数的。以下用几个例子,由浅入深的了解装饰器。在下面的例子中可以体会到这两者的不同。 阅读详情

相关推荐

TypeScript系列教程十一《装饰器》 -- 类装饰器(1)

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可获取一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

2401_84091742的博客 789

[Python] 类装饰器

在Python中,是一个装饰器(decorator),用于定义抽象方法(abstract method)。抽象方法是在父类中声明但没有具体实现的方法。子类必须实现该抽象方法才能被实例化。使用装饰器,可以将方法标记为抽象方法。抽象方法在父类中声明时没有提供具体的实现,只有方法名和参数列表。而子类必须提供具体实现以满足父类中的抽象方法要求。以下是一个示例,展示如何使用。

知智 6948

使用Python获取网站访问的HTTP信息(基于IE浏览器)

在本文中,我们将使用Python编程语言和IE浏览器来获取网站访问的HTTP信息。我们将使用Python的selenium库,它提供了一个简单而强大的接口,可以与各种浏览器进行交互。在上面的代码中,我们首先导入了selenium库中的webdriver模块。接下来,我们将编写Python代码来实现获取网站访问的HTTP信息的功能。通过上述代码,我们可以获取网站访问的HTTP信息。方法和JavaScript代码,我们可以获取网页的HTTP响应码。最后,我们打印了获取的HTTP信息,并使用。

BugHunterX的博客 238

Python装饰器:类装饰器②

类装饰器与函数装饰器类似,只不过它们接受一个类作为参数,并返回一个新类。obj.new_method() # 调用新增的方法obj.existing_method() # 调用被重写的方法在这个例子中,是一个类装饰器,它接受一个类MyClass作为参数,并返回一个新的类。继承自MyClass,并新增和重写了一些方法。类装饰器是 Python 中一个非常强大的工具,可以用来扩展和修改类的行为。通过类装饰器,我们可以在不修改原始代码的情况下为类添加额外的功能。

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 3549

Materials Studio实战技巧(八)——利用片段库高效构建有机金属配合物

本文详细介绍了在Materials Studio中利用Fragment Browser(片段浏览器)高效构建有机金属配合物的实战技巧。通过调用预置的Metal Templates和Ligands库,用户可以快速搭建如茂金属催化剂等复杂分子骨架,并利用对称性操作精确控制Meso与Rac构型。文章还涵盖了自定义片段库的创建与使用,能显著提升建模效率,适用于计算化学与材料模拟领域的研究者。

wine的专栏 931

别再死记硬背了!用Multisim仿真5分钟搞懂运放电压跟随器到底要不要加反馈电阻

本文通过Multisim仿真实验,深入解析运放电压跟随器中反馈电阻的必要性。实验对比不同阻值对电路性能的影响,揭示反馈电阻在提供偏置电流通路、提升高频稳定性和ESD保护中的关键作用,并给出工程实践中的优化建议,帮助工程师快速掌握运放电路设计要点。

weixin_42641998的博客 370

Python进阶 - 类装饰器 用类实现装饰器功能

Python类装饰器:面向对象的函数增强技术 本文介绍了如何使用Python类来实现装饰器功能。主要内容包括: 装饰器本质:装饰器是高阶函数,用于在不修改原函数代码的情况下增强其功能 类装饰器优势: 更方便的状态管理 更清晰的复杂逻辑组织 支持实例化和配置 与OOP集成更自然 实现原理: 通过__call__方法使类实例可调用 类初始化时接收被装饰函数 调用时执行增强逻辑 实战案例: 带状态的调用计数器 带参数的多重执行装饰器 生产级的日志记录装饰器 底层机制:详细解析了__call__方法在类装饰器中的关

千淘万漉虽辛苦,吹尽狂沙始到金 7474

B站DRM视频解密流程实战解析:从密钥获取到播放全流程

本文详细解析了B站DRM视频的解密全流程,从识别加密视频、捕获关键网络请求(如playurl接口的widevine_pssh数据),到逆向分析DRM SDK的JavaScript执行逻辑,最终手动模拟EME流程获取解密密钥,并使用mp4decrypt和ffmpeg工具完成视频文件的解密与合并。文章为开发者提供了从密钥获取到播放的完整实战指南。

weixin_29290379的博客 836

Python装饰器是什么?一文教你搞懂烦人的Python装饰器!!!

Python装饰器

AI Agent 首席体验官 5384

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1697

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo

本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境

qq_33614778的博客 4669

TypeScript系列教程十一《装饰器》 -- 类装饰器

TS 类装饰器学习总结

星宇大前端 2218

Allegro如何进行四层板板层设计

板层的设计

weixin_42499230的博客 3183

类装饰器实现单例设计模式

在之前的文章中,我们重写了__new__方法实现了一个单例设计模式,今天我们来学习一下另外一种实现的方式,使用类装饰器实现单例设计模式。 def singleton(cls): __instance = {} def wrapper(x): if cls in __instance: return __instance[cls] ...

qq_42958642的博客 416

在 ABAP Cloud 里优雅读取与解析 XML:用 sXML Reader 把接口数据落成结构化 ABAP

ABAP Cloud中XML解析实践 摘要:本文介绍了在ABAP Cloud环境下解析XML数据的最佳实践。针对企业系统中常见的XML格式数据,文章推荐使用sXML库中的CL_SXML_STRING_READER进行流式解析,而非传统的DOM方式。重点解析了命名空间(Namespace)、属性(Attribute)和CDATA等关键概念的处理方法,并比较了两种读取属性的策略:通扫所有属性(NEXT_ATTRIBUTE)和精准取值(GET_ATTRIBUTE_VALUE)。文章提供了完整的ABAP Cloud

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 185

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1362

Python高级装饰器:类的装饰器与类作为装饰器实战解析

装饰器是Python中基于高阶函数和闭包实现的元编程技术,其核心原理是在不修改原函数或类代码的前提下,通过包装器动态添加功能。这一机制在工程实践中具有重要价值,常用于日志记录、性能监控、权限校验等横切关注点的统一处理。当应用场景从函数扩展到类时,装饰器的能力边界被极大拓宽,能够处理更复杂的状态管理和结构增强需求。类的装饰器直接作用于类定义,可用于自动注册、单例模式实现或动态添加方法;而类作为装饰器则通过实现__call__方法,使类实例可像函数一样调用,便于封装和维护装饰器自身的状态,例如实现带计数器的调用

weixin_30613343的博客 728

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TypeScript系列教程十一《装饰器》 -- 类装饰器(2)

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

2401_84091544的博客 623

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python笔记 - 函数、方法和类装饰器

语法糖,就可以理解当前装饰器后面加一个()表示立即调用,其参数为装饰的目标对象(类、函数或者可调用的实例对象)装饰器的本质是一个可调用对象(函数,类)装饰器的输入是一个可调用对象(函数,类,可调用的实例对象)装饰器的输出是一个可调用对象(函数,类,可调用的实例对象)

weixin_45411898的博客 1671

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

一文弄懂Python的装饰器

装饰器是什么?在Python中,装饰器是使用’@'语法糖的修饰函数的语句,一般出现在函数定义的上方。装饰器的作用是增强被修饰函数的功能,譬如给函数增加日志功能等。如何实现装饰器?有两种实现方式,一是基于闭包实现,闭包的概念参考,而是基于类实现,两种方式中,闭包的方式相对简单,我们重点看下基于闭包的装饰器。

Saki_Python的博客 1445

TS - 装饰器与注解

Typescript装饰器模式,可以有效的提高开发效率,就像Java中使用注解一样,装饰器让TypeScript的世界更友好。我们使用的许多库都基于这一强大特性构建, 例如和

你好呀 1418

基于类或函数组合的装饰器的原理和实现是怎么样的

时,会先执行装饰器中的前置逻辑,然后调用被装饰对象的。方法,最后执行装饰器中的后置逻辑。类是装饰器,它包装了。

zqx_7的博客 511
上一篇: 你不一定全知道的四种Python装饰器实现详解
下一篇: OpenCV-Python图形图像处理:自用的一些工具函数源代码
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值