Python3 - 実行中の関数名・メソッド名を動的に取得する

実行中の情報を得るには、標準ライブラリの inspect モジュールを使用します。

実行中の関数名・メソッド名を取得する方法

import inspect

関数名・メソッド名 = inspect.currentframe().f_code.co_name
サンプルコード
import inspect


print('関数の外 = ' + inspect.currentframe().f_code.co_name)
# 結果 = '<module>'


def TestFunction(lambdaFunction):
    print('関数内 = ' + inspect.currentframe().f_code.co_name)
    # 結果 = 'TestFunction'

    # 無名関数の実行
    lambdaFunction()


class BaseClass:
    print('基底クラス定義内 = ' + inspect.currentframe().f_code.co_name)
    # 結果 = 'BaseClass'

    def __init__(self):
        print('基底クラスのコンストラクタ内 = ' + inspect.currentframe().f_code.co_name)
        # 結果 = '__init__'

    def __del__(self):
        print('基底クラスのデストラクタ内 = ' + inspect.currentframe().f_code.co_name)
        # 結果 = '__del__'


class SubClass(BaseClass):
    print('派生クラス定義内 = ' + inspect.currentframe().f_code.co_name)
    # 結果 = 'SubClass'

    def __init__(self):
        print('派生クラスのコンストラクタ内 = ' + inspect.currentframe().f_code.co_name)
        # 結果 = '__init__'

    def __del__(self):
        print('派生クラスのデストラクタ内 = ' + inspect.currentframe().f_code.co_name)
        # 結果 = '__del__'


if __name__ == '__main__':
    print('__main__ 内 = ' + inspect.currentframe().f_code.co_name)
    # 結果 = '<module>'

    # 関数と、無名関数の実行
    TestFunction(lambda: print('無名関数内 = ' + inspect.currentframe().f_code.co_name))

    # コンストラクタとデストラクタを実行
    BaseClass()
    SubClass()

サンプルコードの実行結果

関数の外 = <module>
基底クラス定義内 = BaseClass
派生クラス定義内 = SubClass
__main__ 内 = <module>
関数内 = TestFunction
無名関数内 = <lambda>
基底クラスのコンストラクタ内 = __init__
基底クラスのデストラクタ内 = __del__
派生クラスのコンストラクタ内 = __init__
派生クラスのデストラクタ内 = __del__

サンプルコードの実行結果

sys._getframe() との違い

sys._getframe() を使用しても同様の結果が得られる場合がありますが、 sys._getframe() が存在することは保証されていません。
import sys

関数名・メソッド名 = sys._getframe().f_code.co_name

検証環境

関連ページ