Acceder a uno mismo desde el decorador

80

En el método setUp () de unittest, configuré algunas variables propias , a las que luego se hace referencia en las pruebas reales. También creé un decorador para hacer algunos registros. ¿Hay una manera en la que puedo acceder a los auto variables desde el decorador?

En aras de la simplicidad, estoy publicando este código:

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

¿Cuál sería la mejor manera de acceder a un (establecido en setUp ()) desde el decorador?

Kevin
fuente

Respuestas:

121

Dado que está decorando un método y selfes un argumento de método, su decorador tiene acceso selfen tiempo de ejecución. Obviamente, no al analizar, porque todavía no hay objetos, solo una clase.

Así que cambia su decorador a:

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