您的当前位置:首页正文

python类装饰器即__call__方法

2020-01-24 来源:好走旅游网
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()

#结果为:

#我可以对函数进⾏装饰#----------------------------#测试⼀下可不可以.

因篇幅问题不能全部显示,请点此查看更多更全内容