类装饰器

  • 面向对象版装饰器
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__即可.

执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值