装饰器

‘’’
装饰器是什么:
为了增加功能而对函数或者类进行功能扩充的一种语法。

#第一步:声明一个普通的函数即可
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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值