十二、装饰器 4.类装饰器和类方法装饰器
2021/12/15 6:17:24
本文主要是介绍十二、装饰器 4.类装饰器和类方法装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
类装饰器和类方法装饰器
类中至少要有两个方法 1.__init__()和__call__() __init__接收func为self.func(),__call__装饰self.func() @ClassName 返回的结果为obj,调用原函数时等同于obj(),此时触发__call__完成装饰 2.__call__()和成员方法 __call__接收func为self.func(),并return成员方法,成员方法中装饰self.func() @ClassName() 返回的结果为obj(),此时触发__call__返回成员方法,在成员方法中完成装饰
# 类装饰器 class Outer(): def __call__(self, func): # 把传递进来的原函数定义为成员方法 self.func = func return self.inner # 在需要返回的方法中进行装饰 def inner(self, x, y, Func): print('A') self.func(x, y, Func) print('B') # 使用类装饰器装饰函数 # 如果此处为 @Outer,则等同于 demo = Outer(demo),demo() 就等同于 Outer_obj(),效果为直接触发 __call__() @Outer() # Outer()实例化obj -> @obj的含义是把obj当成函数调用 -> obj(demo) -> 触发__call__() -> 返回inner() def demo(x, y, Func): print(Func([x, y])) demo(2, 8, sum) # 此时的demo()等同于Outer类中的成员方法inner() A 10 B
# 类方法装饰器 class Outer(): def recv_func(func): # 把传递进来的原函数定义为类方法 Outer.func = func return Outer.inner # 在需要返回的方法中进行装饰 def inner(): print('C') Outer.func() print('D') # 使用类方法装饰器装饰函数 @Outer.recv_func # Outer.recv_func(demo) -> 返回类方法Outer.inner() def demo(): print('EF') demo() # 此时的demo()等同于Outer类中的类方法Outer.inner() C EF D
这篇关于十二、装饰器 4.类装饰器和类方法装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)