当前位置: 首页 > 面试题库 >

从装饰器访问自我

邓深
2023-03-14
问题内容

在unittest的setUp()方法中,我设置了一些
变量,稍后将在实际测试中引用它们。我还创建了一个装饰器来进行一些日志记录。有没有一种方法可以从装饰器访问这些 变量?

为了简单起见,我将发布此代码:

def decorator(func):
    def _decorator(*args, **kwargs):
        # access a from TestSample
        func(*args, **kwargs)
    return _decorator

class TestSample(unittest.TestCase):    
    def setUp(self):
        self.a = 10

    def tearDown(self):
        # tear down code

    @decorator
    def test_a(self):
        # testing code goes here

什么是访问的最好办法 一个 从装饰(()在设置中设定)?


问题答案:

由于您正在装饰一个方法,并且self是一个方法参数,因此装饰器可以self在运行时访问。显然不是在解析时,因为还没有对象,只有一个类。

因此,您将装饰器更改为:

def decorator(func):
    def _decorator(self, *args, **kwargs):
        # access a from TestSample
        print 'self is %s' % self
        return func(self, *args, **kwargs)
    return _decorator


 类似资料:
  • 问题内容: 如何从儿童的基类访问装饰器? 我以为(错误地)认为ffg。会工作: 该类工作正常,但随后我创建了一个继承自此的子类: 这甚至无法正确导入,更不用说运行了。@_deco未定义。尝试baseclass._deco会引发未绑定的方法_deco()错误,这并不奇怪。 任何想法如何做到这一点,我真的很想将装饰器封装在该类中,但是我对此想法并不满意,需要在基类和子类中对其进行调用。 问题答案:

  • 我试图理解decorator是如何工作的,我想知道一个修饰过的函数是否可以访问decorator的变量。例如,在下面的代码中,如何使f1能够访问localVariable?这可能吗?这是一种很好的做事方式吗?

  • 问题内容: 我是Python装饰器的新手(哇,很棒的功能!),并且我很难使以下内容起作用,因为参数混杂在一起。 运行此命令时,我得到: 我做的那条线 问题 -显然,问题在于缓存器对象而不是Session实例,而该实例实际上没有属性。但是我找不到解决方法。 我已经考虑过但不能使用的解决方案 -我想到使decorator类返回一个函数而不是一个值(如本文的2.1节),以便在正确的上下文中进行评估,但这

  • Django为视图提供了数个装饰器,用以支持相关的HTTP服务。 允许的HTTP 方法 django.views.decorators.http 包里的装饰器可以基于请求的方法来限制对视图的访问。若条件不满足会返回 django.http.HttpResponseNotAllowed。 require_http_methods(request_method_list)[source] 限制视图只能

  • 装饰器(Decorators)(被babel支持, 在 03/17 之后作为stage-2的proposal被引入) 如果你在使用类似于mobx的库, 你能够使用装饰器装饰你的函数. 装饰器本质上其实就是将组件传入一个函数. 使用装饰器能让组件更灵活,更可读并且更易修改组件的功能. 不使用装饰器的例子 class ProfileContainer extends Component { //

  • 上一篇文章将通过解决一个需求问题来了解了闭包,本文也将一样,通过慢慢演变一个需求,一步一步来了解 Python 装饰器。 首先有这么一个输出员工打卡信息的函数: def punch(): print('昵称:两点水 部门:做鸭事业部 上班打卡成功') punch() 输出的结果如下: 昵称:两点水 部门:做鸭事业部 上班打卡成功 然后,产品反馈,不行啊,怎么上班打卡没有具体的日