데코레이터에서 자신에 액세스


80

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

데코레이터에서 (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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.