第二十七章、装饰器

什么是装饰

装饰器是一个函数(或类),主要作用是来用包装另一个函数或类。

作用

在不修改被装饰的函数的源代码和调用方式的情况下,添加或改变原函数(或类)的功能。

装饰器的种类(两种):

  1. 函数装饰器
    • 函数装饰器是用来包装另一个函数或类的函数。
  2. 类装饰器
    • 类装饰器是用来包装另一个函数或类的类。

1. 装饰器的原理和语法

装饰器语法

def 装饰器函数名(fn):
    语句块
    return 函数对象

@装饰器函数名1 <换行>
def 被装饰函数名(形参列表):
    语句块

示例

def do_somthing():
    print('上班!')

do_somthing()  # ???

请问打印结果是什么?

def take_a_holiday():
    print('度假!')

def replace_deco(fn):
    return take_a_holiday

def do_somthing():
    print('上班!')

do_somthing = replace_deco(do_somthing)

do_somthing()  # ???

请问上述程序的打印结果是什么? 为什么?

def take_a_holiday():
    print('度假!')

def replace_deco(fn):
    return take_a_holiday
@replace_deco
def do_somthing():
    print('上班!')

# do_somthing = mydeco(do_somthing)

do_somthing()  # ???

在试一下,打印结果是什么?

这就是装饰器的语法和原理。