1. ホーム
  2. python

[解決済み] デコレーターからセルフにアクセスする

2023-04-20 03:40:12

質問

unittestのsetUp()メソッドで、いくつかの 自己 変数を設定しました。これは後で実際のテストで参照されます。私はまた、いくつかのロギングを行うためにデコレーターを作成しました。これらの変数にアクセスする方法はありますか? 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()で設定)にアクセスする最良の方法は何でしょうか?

どのように解決するのですか?

メソッドを装飾するのですから、そして 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