在装饰器中访问自身对象和装饰器参数

问题描述

我在一个类中有一个装饰器方法,我正在尝试为调用方法添加参数,例如:

@log.diagnostic(DEBUG=True)
def exmp_function():
    '''
    Some stuff
    '''

然后,在装饰器中,我需要访问传递的参数(例如 DEBUG)以及一些 self.attributes:

    def diagnostic(self,*args,**kwargs):
        self.DEBUG = args[0]
        def error_wrap(function): # DEBUG here isn't recognised
            @functools.wraps(function)
            def wrapper(*args,**kwargs):
                try:
                    result = function(*args,**kwargs)
                    self.status = 'OK'
                except Exception as error:
                    self.status = 'ERROR'
                    result = 'Error'
                finally:
                    self.to_File([self.file,self.status,self.DEBUG]) # self.file is defined outside
                    return result
            return wrapper
        return error_wrap

目前,self. 属性是正确的,但是,decorator 参数始终是最后一个调用的装饰器的参数。我认为这是因为每个装饰器都调用了外部包装器,然后将 self.DEBUG 作为最后一个装饰器参数。

因此,我需要找到一种方法将我的 DEBUG 参数向下传递两层。但我找不到办法做到这一点。

如有任何帮助,将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...