首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向类的python修饰器中添加参数

向类的python修饰器中添加参数
EN

Stack Overflow用户
提问于 2021-02-26 14:01:41
回答 2查看 151关注 0票数 0

如何将参数name传递给调度装饰器?

代码语言:javascript
运行
复制
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')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-26 14:46:45

您需要将dispatch方法转换为返回装饰符的方法。这允许您在用参数装饰函数时调用它。

代码语言:javascript
运行
复制
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')

输出

代码语言:javascript
运行
复制
Calling decorated function foobar
Sending with param parameter 1
Decorated function completed foobar
票数 0
EN

Stack Overflow用户

发布于 2021-02-26 14:35:41

您的代码有几个问题,而且您没有具体说明您想要的内容,但是我想出了一些似乎是解决您的问题的方法!

代码语言:javascript
运行
复制
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‘访问它。

我希望我帮了一个哥哥!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66387182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档