15.10 装饰器工厂函数
def factory(param):
def wrapper(func):
print('装饰器工厂函数的装饰器正在装饰')
def inner():
if param == '第一种':
print('用户名和密码登陆')
elif param == '第二种':
print('手机和密码')
elif param == '第三种':
print('邮箱与密码')
else:
return
func()
return inner
return wrapper
@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__方法,是的类的实例是可被调用的
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