0%

【学习记录】—— Decorator(修饰器)

一、Decorator Pattern(修饰器模式)

设计模式的一种,主要功能是向一个现有的对象添加额外功能的同时又不改变其结构。传统方法是使用子类继承的方式来对某一个类进行扩展,但是会导致出现非常多的子类。

二、python 实例

在 python 中,函数可以是一个对象

1
2
3
4
5
6
7
8
9
10
11
12
13
def Add(原函数名):
def 新函数名():
# 额外的功能
# xxxxxxxxxx

# 原来的功能
原函数名

# 会返回新函数,该新函数在保留原函数功能情况下增加了一个新功能
return 新函数名

# 然后便可以调用 Add() 这个函数来为原函数增加额外的功能,这也叫做对函数的修饰
函数 = Add(原函数)

以上相当于 Decorator 的实现

下面是具体使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def Add(func):
def new_func():
print("new")
func

return new_func


@Add
def func_a():
print("a")

@Add
def func_b():
print("b")

func_a()
func_b()

输出如下

1
2
3
4
new
a
new
b

可以看出以下两组代码等价

1
2
3
4
def fun_x():
print("x")

fun_x = Add(fun_x)
1
2
3
@Add
def fun_x():
print("x")

可以在修饰器里面为原函数增加功能,甚至可以完全更改原函数的功能。

修饰器是一个函数,它返回一个新的函数,这个返回的函数用于替代原来的函数的行为。
以上只是对装饰器(修饰器)的简单了解,后面还有带参数的修饰器、修饰器类等更多复杂知识,有需要再说吧

参考链接

Python 之修饰器

Design Patterns - Decorator Pattern

装饰器模式|菜鸟教程