Доступ до себе від декоратора


80

У методі setUp () unittest я встановив деякі власні змінні, на які пізніше посилаються у фактичних тестах. Я також створив декоратор для ведення журналів. Чи є спосіб , в якому я можу отримати доступ до цих самостійно змінним з декоратора?

Для простоти я публікую цей код:

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

Який найкращий спосіб отримати доступ до (встановленого в setUp ()) із декоратора?

Відповіді:


121

Оскільки ви прикрашаєте метод і 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.