1、为什么要用装饰器
软件的设计应该遵循开放封闭原则,即对扩展是开放的,而对修改是封闭的。
简而言之,人家写好的并且能平稳运行的代码千万不要手贱的去动,谁知道你动了程序会不会崩溃!!!
所以当项目有了新需求的时候如何在不动原始代码的情况下添加新功能呢?看题目呀!!!
2、装饰器
函数装饰器分为:无参装饰器和有参装饰两种,二者的实现原理一样,都是’函数嵌套+闭包+函数对象’的组合使用的产物。
简而言之,就是强行给原函数写个爹再加个爷,通过他爷调他爹再找他,达到截胡的目的。
别的不多说,咱们直接上语法糖(PS:毕竟谁放着语法糖不用呢),语法糖的书写格式是: @装饰器名字。
让我来举个栗子
# 需要实现一个功能:
# 在发表评论之前,添加一个"已进行登录验证"
# 定义装饰器
# 如果闭包函数的参数有且只有一个并且是函数类型,那么这个闭包函数称为装饰器
def decorator(func):
def inner():
# 在内部函数里面对已有的函数进行装饰
print('已进行登录验证...')
func()
# 返回内部函数
return inner
# 先定义一个函数
# 使用语法糖的方法对 comment 函数进行装饰
# 此代码相当于 comment = decorator(comment)
# 对函数进行装饰后,comment = inner
@decorator
def comment():
print('发表评论...')
# 调用定义的函数
comment()
好吧,这个是别人的例子,写的文章老好了,快去看呀!!!