python类装饰器即__call__方法

上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器

1.类中的__call__方法:

我们在定义好一个类后,实例化出一个对象,如果对这个对象以直接在后边加括号的方式进行调用,程序就会报错。也就是在类中这种做法是错误的;

而,如果一个类中写入了__call__方法,当我问在对实例对象以括号的方式进行调用时,__call__方法中的语句就会被执行,代码如下:

 1 import time
 2 # 定义一个Time类
 3 class Time(object):
 4     def __init__(self,a):
 5         self.a = a
 6     def __call__(self, *args, **kwargs):
 7         print(self.a )
 8 # 对类进行实例化
 9 now = time.ctime()
10 c = Time(now)
11 # 调用类中的call方法
12 c()
13 # 结果为:Tue Jun 12 17:28:53 2018

2.类作为装饰器的底层原理和上一篇中所谈到的是一致的,以下边代码为示例:

# 定义一个Time类
class Time(object):
    def __init__(self,func): # 注意这里要设定参数接收Test
        self._func = func
    def __call__(self):
        print('我可以对函数进行装饰')
        print("----------------------------")   
        self._func()

@Time # 等价于 Test = Time(Test)
def Test():
    print('测试一下可不可以.')

Test()

#结果为:
#我可以对函数进行装饰
#----------------------------
#测试一下可不可以.
    

 

转载于:https://www.cnblogs.com/houzichiguodong/p/9174349.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值