Доступ к себе из декоратора - PullRequest
       28

Доступ к себе из декоратора

62 голосов
/ 29 сентября 2011

В методе setUp () unittest я установил некоторые 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 Ответ

99 голосов
/ 29 сентября 2011

Поскольку вы декорируете метод, а 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...