Python 中用类编写装饰器

在《流畅的 Python》一书杂谈中推荐使用类来编写装饰器。就我的理解来说,简单的装饰器仍然使用传统的函数来定义比较好。而复杂的、涉及很多状态的装饰器,用类的方法定义,结构会更加清晰,容易扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class RouterBase:
pass

class router(RouterBase):
def __init__(self, *args, **kwargs):
pass

def __call__(self, *args, **kwargs):
pass

def func1(self,*args, **kwargs):
"""辅助函数"""
pass

def func2(self,*args, **kwargs):
"""辅助函数"""
pass

... ...

@router('/index')
def index():
pass

Python Web 框架中,我们会见到这样通过装饰器定义路由,而路由装饰器是非常复杂的,如果卸载一个函数中,这个函数一定是非常复杂的、难以维护的。而我们通过类定义这个路由装饰器,可以通过继承和在类中定义辅助函数,很好的拆分实现,进而优化我们的代码。

参考资料: