この記事は 2015 年 (古いッ!) に書いたのですが、定期的に見られている方が多いようなので、正しいやり方 (inspect module) を追記しました。
2024年 修正版
素直に inspect module を使いましょう〜笑
次のコードで、呼び出し元のフレームコードの定義名 (※関数中で呼べば「関数名」) を取得できます。
import inspect
inspect.currentframe().f_code.co_name
実際に関数 example()
の中で呼んでみた例。 (python console)
>>> import inspect
>>> def example():
... print(inspect.currentframe().f_code.co_name)
>>> example()
example
元の記事 (2015, Python2)
- 2015年に書いてるので、Python2想定です
-
PEP8 で定義されてるのですが、アンダーバー
_
から始まる関数は、内部向け (他言語で言うところの private or system internal) です。本来直接呼び出すのは NG なので 黒魔術 と称しています...笑
毎回忘れるので、メモ。
sys._getframe().f_code.co_name
簡単な関数を書いて試してみる。
>>> def printFuncName():
... print sys._getframe().f_code.co_name
...
>>> printFuncName()
printFuncName
自分はこういう場面でよく使います。
from abc import abstractmethod
class SuperClass(object):
@abstractmethod
def implementMe():
raise NotImplementedError( sys._getframe().f_code.co_name )