您的位置:首页 > 编程语言 > Python开发

0基础学Python(6) —— 关于装饰器

2017-12-22 21:14 841 查看
#第一步:基本函数

def cat():

    print('小猫咪喵喵喵')

cat()

#第二步:扩展功能(不能直接修改原来的函数)

def zhuangshi():

    print('干净的小白白')

    cat()

    print('他的好朋友是小花花')

def cat():

    print('小猫咪喵喵喵')

cat = zhuangshi()

#第三部:实现基本装饰功能

def zhuangshi(func):

    def inner():

        print('干净的小白白')

        func()

        print('他的好朋友是小花花')

    return inner

def cat():

    print('小猫咪喵喵喵')

cat = zhuangshi(cat)

cat()

#第四步:语法糖方式实现函数

def zhuangshi(func):

    def inner():

        print('干净的小白白')

        func()

        print('他的好朋友是小花花')

    return inner

@zhuangshi

def cat():

    print('小猫咪喵喵喵')

cat()

#第五步:带有参数的函数的装饰器

def zhuangshi(func):

    def inner(who,where):

        print('干净的小白白')

        var = func(who,where)

        print('他的好朋友是小花花')

        return var

    return inner

@zhuangshi

def cat(who,where):

    print('小猫咪跟'+ who + '在' + where + '一起喵喵喵')

    return '小花花学不会喵喵喵'

res = cat('小花花','厨房')

print(res)

#第六步:带有收集参数的函数的装饰器

def zhuangshi(func):

    def inner(*who,**where):

        print('干净的小白白')

        var = func(*who,**where)

        print('他的好朋友是小花花')

        return var

    return inner

@zhuangshi

def cat(*who,**where):

    print('小猫咪跟',who,'在',where,'一起喵喵喵')

    return '小花花学不会喵喵喵'

res = cat('小花花','小黑黑',cf = '厨房',ct = '餐厅')

print(res)

#第七步:带有参数的装饰器

def outer(arg):

    def zhuangshi(func):

       def inner():

           if arg == '小花花':

               print('小白白和小花花一起玩皮球')

           elif arg == '小黑黑':

               print('小黑黑是别人家的小狗')

           var = func()

           if arg == '小花花':

               print('小白白累的时候就倚着小花花睡觉')

           elif arg == '小黑黑':

               print('只有周末才能和小黑黑一起玩')

           return var

       return inner

    return zhuangshi

@outer('小花花')

def cat():

    print('小白白的好朋友是小狗小花花')

    return '小花花从来不欺负小白白'

res = cat()

print(res)

#第八步:使用类作为装饰器的参数

class Cat:

    def xcat():

        print('小白白是最可爱的小猫咪')

    def dcat():

        print('小白白会长成可爱的大猫咪')

class Dog:

    def xdog():

        print('小花花也是最可爱的小猫咪')

    def ddog():

        print('小花花现在就已经很大了')

def outer(arg):

    def zhuangshi(func):

        def inner():

            if arg == Cat:

                arg.xcat()

            elif arg == Dog:

                arg.xdog()

            var = func()

            if arg == Cat:

                arg.dcat()

            elif arg == Dog:

                arg.ddog()

            return var

        return inner

    return zhuangshi

@outer(Cat)

def cat():

    print('小白白的好朋友是小狗小花花')

    return '小花花从来不欺负小白白'

res = cat()

print(res)

#第九步:使用类作为装饰器

class Cat:

    def __init__(self,arg):

        #print(arg)

        self.abc = arg

    def __call__(self,val):

        #print(val)

        self.func = val

        return self.inner

    def inner(self):

        print('小白白动不动的就撒娇')

        self.func()

        print('小花花特别宠溺小白白')

        #return self.func

@Cat('hao')

def cat():

    print('小白白的好朋友是小狗小花花')

cat()

#第十步:为类添加装饰器

def zhuangshi(arg):

    def inner():

        print('干净的小白白')

        print('他的好朋友是小花花')

        return arg()

    return inner

@zhuangshi

class Cat:

    print('小白白的好朋友是小狗小花花')

Cat()

#第十一步:装饰器的嵌套

def zhuangshi1(func):

    def inner():

        print('干净的小白白')

        func()

        print('他们永远都是好朋友')

    return inner

def zhuangshi2(func):

    def inner():

        print('可爱的小花花')

        func()

        print('他们俩个喜欢一起玩耍')

    return inner

@zhuangshi1

@zhuangshi2

def cat():
    print('小白白的好朋友是小狗小花花')

Python学习交流、资源共享群:563626388 QQ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: