次のような関数と内部関数があるとします (これは変更できません)。
from functools import wraps
def outer_f(some_callable):
def inner_f(v):
return some_callable(v) + 1
return inner_f
そして、そのようなinner_fに対応するouter_fの呼び出されたバージョンである関数「func」のみを取得します。
>>> func = outer_f(int)
このような場合、「some_callable」という名前の変数は int 型であり、パラメーターを指定して func を呼び出すと、次のような応答が得られます。
>>> func('1')
2
func関数インスタンスしかない場合 (つまり、outer_f が呼び出された後)、関数の外部からsome_callableにアクセスしたいと思います。
私が間違っていなければ、some_callable は関数 inner_f の自由変数 (func.func_code.co_freevars) です。func を見るだけで、パラメーター int で func が呼び出されていることをどのように知ることができますか?
inspect モジュールを使用したり、関数の属性を調べたりして、問題を解決できませんでした。トレース モジュールで func を呼び出してからスタック トレースを調べたり、pdb を使用したりする方法は有望に思えますが、見苦しいハックのようなものです。
この質問は単純に、関数のスコープの自由変数に外部からアクセスすることを単純化します。
では、関数を実行せずに、自由変数「some_callable」が「int」であることをどのように知ることができますか?