在《流畅的 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 框架中,我们会见到这样通过装饰器定义路由,而路由装饰器是非常复杂的,如果卸载一个函数中,这个函数一定是非常复杂的、难以维护的。而我们通过类定义这个路由装饰器,可以通过继承和在类中定义辅助函数,很好的拆分实现,进而优化我们的代码。
参考资料: