最近在看装饰器,博客也看了挺多的,发现很多写的其实挺难理解的,在此我作为一个小白过来人,在这里写一个我个人认为较好理解的装饰器理解教程
首先,先说一下装饰器的概念,简单的说就是,你写好了一个函数,后面有需求说,这个函数的功能不完全,要加几个功能,但是你又不想重写这个函数,这个时候你就可以给这个函数写一个装饰器,在不修改原先函数的前提下加上了所需的功能。
一、这个number函数我输出了123456,后面我又要输出111111,不更改number函数,加个装饰器即可,装饰器要写在前面,不然会报错
def testAdd(func):
def n():
func()
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):
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):
c=self.fun()
print('111111')
return c
@main
def sum():
print("123456")
sum()