我最近开始尝试使用 Python 装饰器(和高阶函数),因为看起来它们可能会使我的 Django 单元测试更加简洁。例如,而不是写:
def visit1():
login()
do_stuff()
logout()
我可以改为
@handle_login
def visit1():
do_stuff()
然而,经过一些实验,我发现装饰器并不像我希望的那么简单。首先,我对在不同示例中发现的不同装饰器语法感到困惑,直到我了解到装饰器在接受参数时的行为非常不同。然后我尝试装饰一个方法,最终发现它不起作用,因为我首先必须通过添加一个将我的装饰器变成描述符__get__
方法。在整个过程中,我已经多次感到困惑,但仍然发现调试这个“装饰”的代码比通常的 Python 更复杂。我现在正在重新评估我的代码中是否真的需要装饰器,因为我最初的动机是节省一些打字,而不是因为有任何东西真正需要高阶函数。
所以我的问题是:应该自由使用装饰器还是谨慎使用?避免使用它们是否更像 Pythonic?