【发布时间】:2010-06-30 17:57:18
【问题描述】:
我想编写一个 python 函数装饰器来测试函数的某些参数是否通过了某些标准。例如,假设我想测试一些参数总是偶数,那么我希望能够做这样的事情(不是有效的 python 代码)
def ensure_even( n ) :
def decorator( function ) :
@functools.wraps( function )
def wrapper(*args, **kwargs):
assert(n % 2 == 0)
return function(*args, **kwargs)
return wrapper
return decorator
@ensure_even(arg2)
def foo(arg1, arg2, arg3) : pass
@ensure_even(arg3)
def bar(arg1, arg2, arg3) : pass
但我不知道如何实现上述目标。有没有办法将特定的参数传递给装饰器? (就像上面的 arg2 代表 foo 和 arg3 代表 bar)
谢谢!
【问题讨论】:
-
制作参数装饰器的唯一方法是使用嵌套装饰器。