以下のコードが demovar を装飾された関数に公開していない理由がわかりません。
def exposebasevar(function):
def decorator(*args, **kwargs):
demovar = 'Where am I?' # => or MyThreadSafeObjectHandle()
return function(*args, **kwargs)
return decorator
@exposebasevar
def usesexposedvariable():
print demovar # this line will give an error
usesexposedvariable()
背景: 私は、すべての関数で使用される 1 つのグローバル変数を持つモジュールを持っています。今、私はそれをスレッドセーフにしたいので、デコレータを介してこの変数を利用できるようにしました。次に、デコレーターで、オブジェクトのどのインスタンスがスレッドに属しているかを把握し、それを渡すことができます。そうすれば、すべての関数の署名やコンテンツを変更する必要がなくなります。
これを設定する方法を知っている人はいますか?ありがとう。