Pythonでは、私がデコレータを持っているのは、それを呼び出す関数がローカルに定義されていれば、実際の作業をスキップする必要があります。機能がローカルに定義されているかどうかを検出するには?
def fn1():
# @my_decorator will be here
def fn2():
pass
print(fn2)
return fn2
x = fn1()
print(x)
print(x.__module__)
それは、この出力します:私は、簡単なテストスクリプト行わ
<function fn1.<locals>.fn2 at 0x7fd61bdf3ae8>
<function fn1.<locals>.fn2 at 0x7fd61bdf3ae8>
__main__
私は見ての通り、Pythonは関数が(印刷されたテキストに<locals>
)ローカル空間で定義されていることを見ているのが、私私はそのビットをどのように見つけることができません。私はinspect
モジュールを通って歩き、同様のものは見ません。
関数がグローバルにあるかどうかに依存することはできません。
私は何を使用しますか?
これは合法的に良い解決策だと思います。 '__qualname__'は、関数の' repr'を作成するために(少なくともCPythonでは)使われています。それがチェックする他の隠し属性はありません。 –
@JimFasarakisHilliardええと、私は 'inspect.currentframe()で遊んでいました.f_back.f_localsはglobals()ですが、うまくいくようですが、私は* less *でもそれが好きです。 –