装饰器这个概念在函数中已经讲过,主要通过@语法调用另一个函数给当前函数附加一个功能,面向对象中想实现装饰器这种功能也是一样的,但是我们需要在类的内部实现call方法。
1.函数装饰器
def check(func):
def test():
print('身份验证')
func()
return test
@check
def load():
print('登陆成功')
load()
返回结果:
身份验证
登陆成功
2.类装饰器
class Check:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs): # 想让类像函数一样调用要用call方法
print('身份验证')
self.func()
@Check
def load():
print('登陆成功')
# b = Check(load)
# b()
load() # 和上面两行同样效果
返回结果:
身份验证
登陆成功
前面的课程介绍过call方法会在对象调用的时候就被提前调用,所以借助于call方法我们可以给函数在执行前就进行一定的数据处理。