从装饰师访问自己

时间:2011-09-28 23:04:56

标签: python unit-testing scope

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

为了简单起见,我发布了这段代码:

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

从装饰器访问 a (在setUp()中设置)的最佳方法是什么?

1 个答案:

答案 0 :(得分:96)

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

所以你将装饰师改为:

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