第二十七章、装饰器
什么是装饰
装饰器是一个函数(或类),主要作用是来用包装另一个函数或类。
作用
在不修改被装饰的函数的源代码和调用方式的情况下,添加或改变原函数(或类)的功能。
装饰器的种类(两种):
- 函数装饰器
- 函数装饰器是用来包装另一个函数或类的函数。
- 类装饰器
- 类装饰器是用来包装另一个函数或类的类。
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() # ???
在试一下,打印结果是什么?
这就是装饰器的语法和原理。