首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆叠的python装饰器的函数参数发生了什么变化?

堆叠的python装饰器的函数参数发生了什么变化?
EN

Stack Overflow用户
提问于 2020-01-30 02:17:57
回答 1查看 82关注 0票数 0

我不知道如何将原始参数传递给堆叠的装饰器。下面是我的例子:

代码语言:javascript
复制
def outside_decorator(function):
    @functools.wraps(function)
    def wrapper(*args, **kwargs):
        print('outside args:',inspect.getfullargspec(function).args)
        return function(*args,**kwargs)
    return wrapper

def inside_decorator(function):
    @functools.wraps(function)
    def innerwrapper(*args,**kwargs):
        print('inside args:', inspect.getfullargspec(function).args)
        return function(*args,**kwargs)
    return innerwrapper

class trial:
    @outside_decorator
    @inside_decorator
    def __init__(self,val1,val2,val3,note1='hello',note2='hi'):
        print('decorated function args:',inspect.getfullargspec(trial).args)
        print('arg values:',val1, val2, val3, note1, note2)

a=trial(1,2,3)

输出为:

代码语言:javascript
复制
outside args: []
inside args: ['self', 'val1', 'val2', 'val3', 'note1', 'note2']
decorated function args: []
arg values: 1 2 3 hello hi

我看过一些答案,它们引用了@functools.wraps()的一个错误,并涉及到使用@decorator.decorator的装饰器模块来装饰装饰器,但它使得装饰器或包装器只接受允许的位置参数输入。我试过每一种组合,但我还是搞不懂。

如何通过堆叠的装饰器保存参数?

EN

回答 1

Stack Overflow用户

发布于 2020-02-09 22:21:09

下面是如何在Python中使用装饰器中的参数的一个很好的例子:https://www.geeksforgeeks.org/decorators-with-parameters-in-python/

请记住,在Python中,一切都是对象,当您尝试使用Python中的另一个函数来修饰一个函数时,这意味着您只是使用内部函数作为外部函数的参数。

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

https://stackoverflow.com/questions/59973257

复制
相关文章

相似问题

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