Dea*_*ada 2 python python-decorators
我有一个代码:
from functools import wraps
def my_decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
print kwargs["name"] # Should display Dean Armada
print 'Calling decorated function'
return f(*args, **kwargs)
return wrapper
@my_decorator(name="Dean Armada")
def example():
"""Docstring"""
print 'Called example function'
example()
Run Code Online (Sandbox Code Playgroud)
我想要实现的是让我的装饰器依赖 kwargs 参数作为其所有参数。我上面的代码抛出此错误
my_decorator() got an unexpected keyword argument 'name'
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式为装饰器设置单独的参数:
from functools import wraps
def my_decorator(**decorator_kwargs): # the decorator
print decorator_kwargs['name']
def wrapper(f): # a wrapper for the function
@wraps(f)
def decorated_function(*args, **kwargs): # the decorated function
print 'Calling decorated function'
return f(*args, **kwargs)
return decorated_function
return wrapper
@my_decorator(name='Dean Armada')
def example(string):
print string
if __name__ == '__main__':
example('Print this!')
Run Code Online (Sandbox Code Playgroud)
运行此命令会产生输出:
Dean Armada
Calling decorated function
Print this!
Run Code Online (Sandbox Code Playgroud)
另请注意,如果需要,也decorator_kwargs
可以从wrapper
和访问。decorated_function
归档时间: |
|
查看次数: |
2159 次 |
最近记录: |