如何将参数name传递给调度装饰器?
import functools
class Dispatcher:
def dispatch(self, func): # passing name here not worked
@functools.wraps(func) # passing name here not worked
def wrapper(*args, **kwargs):
print('the NAME paramater is:', ???)
return wrapper
@dispatcher.dispatch(name='foobar')
def send(param):
pass
send(param='parameter 1')发布于 2021-02-26 14:46:45
您需要将dispatch方法转换为返回装饰符的方法。这允许您在用参数装饰函数时调用它。
import functools
class Dispatcher:
def dispatch(self, name):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print('Calling decorated function', name)
func(*args, **kwargs)
print('Decorated function completed', name)
return wrapper
return decorator
dispatcher = Dispatcher()
@dispatcher.dispatch(name='foobar')
def send(param):
print('Sending with param', param)
send(param='parameter 1')输出
Calling decorated function foobar
Sending with param parameter 1
Decorated function completed foobar发布于 2021-02-26 14:35:41
您的代码有几个问题,而且您没有具体说明您想要的内容,但是我想出了一些似乎是解决您的问题的方法!
import functools
class Dispatcher:
def dispatch(self, func): # passing name here not worked
@functools.wraps(func) # passing name here not worked
def wrapper(*args, **kwargs):
print('the name paramater is:', kwargs['param'])
return wrapper
dispatcher = Dispatcher()
@dispatcher.dispatch
def send(param):
pass
send(param='parameter 1')我创建了Dispatcher类的一个实例,以避免错误,即缺少必需的参数self。其次,我没有调用调度方法,这样它就可以以'send‘作为func。这就是装饰师的工作方式。
您将关键字参数发送到“send”,所以我使用kwargs‘’param‘访问它。
我希望我帮了一个哥哥!
https://stackoverflow.com/questions/66387182
复制相似问题