- 面向对象版装饰器
class SetFun(object):
def __init__(self, func):
print("初始化")
self.func = func
def __call__(self, *args, **kwargs):
print("执行权限认证")
return self.func(*args, **kwargs) # 执行原先的函数
@classmethod
def set_value(cls, value):
print(value)
return cls
# return SetFun
# @SetFun.set_value('2019')
# 第一步SetFun.set_value('2019')得到类名
# 第二步@类名,@SetFun ===> test = SetFun(test)
@SetFun.set_value('2019')
def test():
print("test")
test()
- 当一个类型实现了特殊方法__call__,该类的实例就变成了可调用的类型,
对象名() 等价于 对象名.call() ,有时候可以简化对象的调用,让对象
变成可调用的对象, 实现__call__即可.
执行结果: