8 装饰器
2 通过类方式,实现装饰器
def check(func):
print("增加功能")
def inner():
print("登录验证操作....")
func()
return inner
@check
def fss():
print("发说说")
fss()
>>>> 打印结果
增加功能
登录验证操作....
发说说
- 使用@check 方式实际上就是使用
fss = check(fss)
def check(func):
print("增加功能")
def inner():
print("登录验证操作....")
func()
return inner
# @check
def fss():
print("发说说")
fss = check(fss) # 使用@check 方式实际上就是使用`fss = check(fss)`
fss()
>>>> 打印结果
增加功能
登录验证操作....
发说说
- 那么对于
fss = check(fss),使用对象思想的理解就是:
- check 是一个类,check()方式是实例化 check 类;
- check类实例化时接收一个参数,参数就是是 fss 函数;
- fss 就是 check类的实例对象;
- fss() 就是调用实例方法,此时的 check 类必须实现了
__call__方法;
实现代码如下
class check:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print("增加功能")
print("登录验证操作....")
self.func()
def fss():
print("发说说")
fss = check(fss)
fss()
>>>> 打印结果
增加功能
登录验证操作....
发说说
class check:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print("增加功能")
print("登录验证操作....")
self.func()
@check
def fss():
print("发说说")
fss()
>>>> 打印结果
增加功能
登录验证操作....
发说说
问题:
- 回顾装饰器的概念及通过闭包及返回函数方式的实现
- 代码练习:通过类形式实现装饰器
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。