Pythonで呼び出し関数のモジュールの__name__を取得する 質問する

Pythonで呼び出し関数のモジュールの__name__を取得する 質問する

以下が含まれているとしますmyapp/foo.py:

def info(msg):
    caller_name = ????
    print '[%s] %s' % (caller_name, msg)

以下がmyapp/bar.py含まれます:

import foo
foo.info('Hello') # => [myapp.bar] Hello

この場合、呼び出し関数のモジュール (「myapp.foo」) の属性caller_nameに設定したいのですが、どうすればよいでしょうか?__name__

ベストアンサー1

検査モジュールを確認してください:

inspect.stack()スタック情報を返します。

関数内では、inspect.stack()[1]呼び出し元のスタックを返します。そこから、呼び出し元の関数名、モジュールなどに関する詳細情報を取得できます。

詳細についてはドキュメントを参照してください:

python.org/library/inspect.html を参照してください。

また、Doug Hellmann は PyMOTW シリーズで、inspect モジュールについて優れた記事を書いています。

モジュールの検査

編集: ここに、あなたが望むことを実行するコードがあります。

import inspect 

def info(msg):
    frm = inspect.stack()[1]
    mod = inspect.getmodule(frm[0])
    print '[%s] %s' % (mod.__name__, msg)

おすすめ記事