装饰器工厂函数与类装饰器

15.10 装饰器工厂函数

# 根据参数的不同,会返回不同的装饰器

# def 装饰器工厂函数(param):
#     if param == '第一种情况':
#         生成对应的装饰器
#     return 装饰器


def factory(param):

    def wrapper(func):
        print('装饰器工厂函数的装饰器正在装饰')
        def inner():
            if param == '第一种':
                print('用户名和密码登陆')
            elif param == '第二种':
                print('手机和密码')
            elif param == '第三种':
                print('邮箱与密码')
            else:
                # print('登陆失败')
                return
            func()
        return inner
    return wrapper

# ret_func = factory(1)
#
# @ret_func
# def info():
#     print('info')


@factory('第一种')
def info():
    print('info')

info()


展示:
装饰器工厂函数的装饰器正在装饰
用户名和密码登陆
info

15.11 类装饰器

class Authen(object):
    def __call__(self, *args, **kwargs):
        pass
    pass

a = Authen()
a()
print(callable(a))


重写__call__方法,是的类的实例是可被调用的

# callable()

# class Authen(object):
#     def __call__(self, *args, **kwargs):
#         pass
#     pass
#
# a = Authen()
# a(0)
# print(callable(a))

class Authen(object):

    def __init__(self, func):
        self.__func = func
        print(func)

    def __call__(self, *args, **kwargs):
        print('装饰器的装饰功能')
        self.__func()
        pass


@Authen
def info():
    print('sadas')

info()

展示:
<function info at 0x00000182210142F0>
装饰器的装饰功能
sadas

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值