Python 学习笔记9(装饰器,decorator)

31 装饰器

装饰器可以对一个函数、方法或者类进行加工,是一种高级的python语法。

  • 装饰函数

  1. 接收一个可调用对象作为输入参数,并返回一个新的可调用对象.
  2. 把函数传递给装饰器,然后增加新的功能,返回一个新的函数重赋值给原函数
  3. 语法:

def decorator1...  #  定义装饰器

@decorator1        #  定义函数前,@装饰器

def function1        # 定义要加工的函数

例子:

def mydecorator(myfunction):
    def new_myfunction(a,b):
        print("modify myfunction:")   # 1
        return myfunction(a,b)
    return new_myfunction


@mydecorator
def myfunction(x,y):
    print("old myfunction")            #2
    return x*y

print(myfunction(6,7))

顺序: 先执行装饰器里面的语句1,再执行原函数的语句2。

  • 含参的装饰器

在上面的例子中,@mydecorator默认后面的函数是它的唯一参数;

实际上,装饰器也可以含有其它参数,如@mydecorator(a)

  •  装饰类

一个装饰器可以接收一个类,并返回一个类,从而起到加工类的效果。

例子:

def mydecorator(myclass):
    class newClass:
        def __init__(self,age):
            self.display_time=0
            self.wrapped=myclass(age)                               #把原类赋值给新类
        def display(self):
            self.display_time+=1
            print("this is ",self.display_time,"th display time")   #1
            self.wrapped.display()                                  # 调用原类的函数
    return newClass

@mydecorator
class Bird:
    def __init__(self,age):
        self.age=age
    def display(self):
        print("My age is ", self.age)                              #2

eagleLord=Bird(5)
for i in range(4):
    eagleLord.display()

顺序与装饰函数类似。先装饰类1,后原类2。

原文地址:https://www.cnblogs.com/skyEva/p/5477564.html