菜鸟学python(05)——装饰器

装饰器就是对函数或者方法或者类进行修饰,增加其本身的功能,但是前提是在不改变原代码的基础上


第一种:函数装饰器装饰函数

用函数装饰函数

def decor(func):#函数名随便写
    #声明内部函数来制作完整的装饰函数
    def inner():#函数名随便写
        print('高高兴兴去上学')
        func()#相当于调用laxi()
        print('兴高采烈回家去')
    return  inner
@decor#laxi = decor(gtschool)
def gtschool():
    print('好好学习,天天向上')
#调用函数
gtschool()
上面代码你会发现,在没有改变原来函数的基础上,增加了函数的功能

并且,函数可以带有参数和返回值

如果想要使装饰器带有参数,来进行判断,装饰器函数外层需要再写一层函数outer()


第二种:类作为装饰器的函数,传入装饰器

#祝愿祈福类
class Wish:
    #绑定类的方法
    def before():
        print('高高兴兴上学去')
    #绑定类的方法
    def after():
        print('兴高采烈回家去')
#装饰器
def decor(cls):

    def _decor(func):
        #这是未来的拉稀函数
        def __decor():
            cls.before()
            result = func()
            cls.after()
            return result
        #返回装饰之后的函数
        return __decor
    return _decor
@decor(Wish)
def gtschool():
    print('好好学习,天天向上')
    return '我是小天才'
#调用函数
jg = htschool()
print(jg)
这一方法就是将类作为装饰器的参数传入函数,并且带有返回值


第三种:使用类作为装饰器

class Decor:
    def __init__(self,arg):
        #存入对象
        self.arg = arg
    #此魔术方法用于接收原函数
    def __call__(self,func):
        #将原方法存到对象当中
        self.func = func
        #返回装饰之后的函数
        return self.mygtschool
    #装饰函数
    def mygtschool(self):
        print('高高兴兴上学去')
        #调用原函数
        result = self.func()
        print('兴高采烈回家去')
        return result
@Decor(5)
def gtschool():
    print('好好学习,天天向上')
    return '我是小天才'
jg = gtschool()
print(jg)
将类作为装饰器使用,使用init,和call魔术方法,将实例化的对象作为函数来使用

第四种:为类添加装饰器

def zhuangshi(cls):
    def inner():
        print('你是谁?')
        cls.say()
        print('知道了吗?')
    return inner



@zhuangshi
#类
class Human:
    #用绑定类的方法
    def say():
        print('我是人类')

#实例化类

Human()
这种方法就是将第一种变形,装饰的实类,不是函数了


第五种:装饰器嵌套

def zhuangshi1(func):
    def inner():
        print('干什么呢?')
        func()
        print('哦~~知道了!!')
    return inner
#装饰器2
def zhuangshi2(func):
    def inner():
        print('小子')
        func()
        print('干吧')
    return inner


@zhuangshi2
@zhuangshi1
#函数
def say():
    print('嘿嘿嘿~~~')

声明两个装饰器函数,叠加使用,注意运行的先后顺序


@语法糖的作用,本质是函数,相当于gtschool = zhuangshi(gtschool)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值