‘’’
装饰器是什么:
为了增加功能而对函数或者类进行功能扩充的一种语法。
#第一步:声明一个普通的函数即可
def love():
print(‘xxxx’)
#调用函数:
love()
#第二步:增加功能
#定义增加功能的函数
def decor(func):
#增加功能1
print(‘zzzzz’)
#调用基本函数
func() # 相当于调用 love函数
#增加功能2
print('cccccc')
#基本函数
def love():
print(‘xxxxx’)
love = decor(love) #将基本函数作为参数传入装饰函数中
#调用函数
love()
#第三步:基本的装饰器
#装饰器函数
def decor(func):
#声明一个内部函数
def inner():
#增加功能1
print('qqqqqq')
#增加功能2
print('wwwwww')
#调用基本功能
func()
#必须返回一个函数
return inner #未来的love函数
#基本函数
def love():
print(‘eeeeee’)
love = decor(love) #装饰操作
print(love)
#调用函数
love()
#第四步:装饰器语法
#装饰器函数
def decor(func):
#声明一个内部函数 ,就是未来的love函数
def inner():
#增加功能1
print('qqqqqq')
#增加功能2
print('wwwwww')
#调用基本功能
func()
#必须返回一个函数
return inner #未来的love函数
#基本函数
@decor # 等价于 love = decor(love)
def love():
print(‘eeeeee’)
#装饰操作
#love = decor(love)
#调用函数
love()
#第五步:为基本函数添加 返回值和参数
#返回值的处理方式
#定义装饰函数
def decor(func):
#定义一个内部函数
def inner():
#增加功能1
print(‘ccccc’)
#基本功能
var = func() #相当于调用了love
#增加功能2
print('dddddd')
#返回一个值,是原有基本函数的返回值
return var
#返回内部函数
return inner
#定义基本函数
@decor #love = decor(love)
def love():
print(‘aaaaa’)
return ‘ai’
#调用函数
aa = love()
print(aa)
#定义基本函数
def decor(func):
#定义一个内部函数
def inner(a1,b2):
#增加功能1
print(‘那一年的夏天’)
#基本功能
var = func(a1,b2) #相当于调用了love
#增加功能2
print('两人过上了没羞没臊的生活')
#返回一个值,是原有基本函数的返回值
return var
#返回内部函数
return inner
#定义基本函数
@decor #love = decor(love)
def love(who1,sho2):
print(’{}亲亲{}’.format(who1,sho2))
return ‘原来这就是爱呀’
#调用函数
aa = love(‘巨屌’,‘欧阳’)
print(aa)
#第六步 加上收集参数(收集参数,关键字收集参数)
#定义基本函数
def decor(func):
#定义一个内部函数
def inner(*p,**c):
#增加功能1
print(‘那一年的夏天’)
#基本功能
var = func(*p,**c) #相当于调用了love
#增加功能2
print('抱抱')
#返回一个值,是原有基本函数的返回值
return var
#返回内部函数
return inner
#定义基本函数
@decor #love = decor(love)
def love(*parent,**child):
print(parent,‘亲亲’,child)
return ‘原来这就是爱呀’
#调用函数
love(‘爸爸’,‘妈妈’,son = ‘儿子’,girl =‘女儿’)
print()
#第七步:为装饰器添加参数
#定义一个装饰器, 一个装饰器同时装饰多个函数(不同的函数装饰不同的内容)
def outer(arg): # 调用outer返回装饰器
#定义装饰器
def decor(func):
#定义内部函数
def inner():
#判断正在装饰的函数
if arg == ‘xiao’:
#增加功能1
print(‘我给你讲一个笑话吧’)
#调用基本函数
func()
#增加功能2
print(‘肚子笑疼了吧’)
elif arg == 'ku':
#增加功能1
print('告诉你一个不幸的消息吧')
#调用基本函数
func()
#增加功能2
print('节哀顺变')
#返回内部函数
return inner
#返回装饰器
return decor
#基本函数1
@outer(‘xiao’)
def smile():
print(‘哈哈哈哈…’)
#基本函数2
@outer(‘ku’)
def cry():
print(‘呜呜呜…’)
#调用smile
smile()
#调用sry
cry()
#第八步:将类作为参数传入装饰器中使用
#存在一个类,类中的方法是需要装饰的功能
class Parent:
#成员方法
#抱抱
def baobao():
print(‘抱抱’)
#举高高
def jugaogao():
print('举高高')
#装饰器外层
def outer(cls):
#装饰器
def decor(func):
#定义内部函数
def inner():
#增加功能1
cls.baobao()
#调用基本函数
func()
#增加功能2
cls.jugaogao()
#返回内部函数
return inner
#返回装饰器
return decor
#基本函数
@outer(Parent)
def love():
print(‘亲亲’)
#调用函数
love()
#第九步:将类作为装饰器(用类做装饰器)
#定义装饰器
#装饰器外层
def outer(arg):
#装饰器
def decor(func):
#内部函数
def inner():
#增加功能1
print(‘zzzzzz’)
#基本函数
func()
#增加功能2
print(‘xxxxxx’)
#返回函数
return inner
#返回装饰器
return decor
#定义类作为装饰器
1.可以带有区分或者使用的参数arg
2.具有接收基本函数传入的参数func
3.定义未来的函数inner
class Outer:
#初始化魔术方法
def init(self,arg):#相当于outer函数
#接收的参数为了其它成员可以使用,存入对象中
self.art = arg
#一定要具有__call__魔术方法使得对象可以当做函数使用
def __call__(self,func):#这是装饰器的本体,相当于decor函数
#将call接收的参数func 存入对象
self.func = func
#返回内部函数inner
return self.inner
# 定义内部函数inner
#将inner作为类的方法存在
def inner(self):
# 增加功能1
print('qqqqqq')
# 基本功能
self.func()
# 增加功能2
print('wwwwww')
#基本函数
@Outer(‘ai’)
def love():
print(‘cccccc’)
#调用函数
love()
#第十步:为类添加装饰器
#定义装饰器
def decor(cls):
#定义内部信息(相当于原来的inner)
def inner():
#产生Human类的对象,(相当于基本功能)
obj = cls()
#添加内容(相当于增加功能)
obj.age = 1
obj.sex = 'man'
#返回对象
return obj
#返回inner函数
return inner
#定义基本类
@decor
class Human:
pass
#使用类 实例化对象
ren = Human() #相当于调用Human函数,得到了一个结果【对象】
print(ren)
print(ren.dict)
‘’’
#第十一步:多层装饰器嵌套
#定义装饰器1
def decor1(func):
#定义内部函数
def inner():
#增加功能1
print(‘aaaaa’)
#调用基本功能
func()
#增加功能2
print(‘bbbbbb’)
#返回内部函数
return inner
#定义装饰器2
def decor2(func):
def inner():
# 增加功能1
print(‘ddddddd’)
# 调用基本功能
func()
# 增加功能2
print(‘eeeeeee’)
# 返回内部函数
return inner
#定义基本函数
@decor2
@decor1
def love():
print(‘ccccccc’)
#调用函数
love()