类装饰器
2022-09-18
类装饰器的定义:
使用一个类作为一个装饰器,在类里面对已有函数添加其他功能。
类装饰器使用的一个实例:
1 class MyDecorator(object): 2 def __init__(self,func): 3 self.__func = func 4 5 def __call__(self, *args, **kwargs): 6 print("课已讲完") 7 self.__func() 8 9 @MyDecorator 10 def show(): 11 print("快要下课啦") 12 13 show()
说明:
第10-11行,原来的函数
第1-7行,定义了一个类装饰器,为原来的函数添加其他功能。注意:如果此时是类作为装饰器的话,之前装饰器中传入的函数现在应该放在的位置在“__init__”构造函数中。
第3行,为了在下面的代码中调用func函数,所以此处要将传入的"func"参数作为一个属性。“self.__func”,在func前面加了两个下划线表示将该func属性作为一个私有属性。
第5行,为了在下面函数调用中直接使用类对象名调用,使用此处要使用“__call__”,它的目的是将对象作为一个可调用的对象。
第6行,增加的新的功能。
第7行,调用“__func()”函数,注意,此处调用的是一个函数,而非上面的属性,因此要加上括号。因为是在类的内部调用的本类传入的参数,所以要使用“self”。
第9行,类装饰器语法糖,表示给原来的函数增加新的功能。
运行结果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南