python3进阶装饰器

最近在看装饰器,博客也看了挺多的,发现很多写的其实挺难理解的,在此我作为一个小白过来人,在这里写一个我个人认为较好理解的装饰器理解教程

首先,先说一下装饰器的概念,简单的说就是,你写好了一个函数,后面有需求说,这个函数的功能不完全,要加几个功能,但是你又不想重写这个函数,这个时候你就可以给这个函数写一个装饰器,在不修改原先函数的前提下加上了所需的功能。

一、这个number函数我输出了123456,后面我又要输出111111,不更改number函数,加个装饰器即可,装饰器要写在前面,不然会报错

def testAdd(func):
    def n():
        func()			#等同于调用number
        print('11111')  
    return  n

@testAdd
def number():
    print('123456')

number()

二、有参数的,这个numberAdd函数输出了a+b,后面我又要输出a*b,不更改numberAdd函数,加个装饰器即可,装饰器要写在前面,不然会报错

def numberMult(func):
    def n(a,b):
        func(a,b)
        print('a*b=',a*b)  
    return  n

@numberMult
def numberAdd(a,b):
    print('a+b=',a+b)

numberAdd(1,2)

三、类装饰器,有参数的,这个sum函数输出了a+b,后面我又要输出a*b,不更改sum函数,加个类装饰器即可,装饰器要写在前面,不然会报错

class main:   #类装饰器
    def __init__(self,fun): #通过构造函数获取输入的值
        self.fun=fun

    def __call__(self,a,b):  #通过__call__调用
        print('a*b=',a*b)
        c=self.fun(a,b)
        return c


@main       
def sum(a,b):
    print("a+b=",a+b)

sum(1,2)

四、无参数,这个sum函数我输出了123456,后面我又要输出111111,不更改sum函数,加个装饰器即可,装饰器要写在前面,不然会报错

class main:   #类装饰器
    def __init__(self,fun): #通过构造函数获取输入的值
        self.fun=fun

    def __call__(self):  #通过__call__调用
        c=self.fun()
        print('111111')
        return c


@main       
def sum():
    print("123456")

sum()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值