challenge 呼んだのは誰?

自身を呼び出した関数(メソッド)の名前を返す関数(メソッド)を書いてください。

Ruby で表現すると、 以下のような「fooという関数を呼び出す関数」#bar、#bazがあるとき

def bar; foo end
def baz; foo end
このbar, bazの返り値が以下のようになるような関数fooを定義してください。
bar  #=> "bar"
baz  #=> "baz"

このお題は匿名の「Smalltalk からの挑戦状」を元に作成しました。 確かにこの手のリフレクションの機能が言語によってどう違うのかは興味深いところです。 リフレクションを使う問題をいくつか考えてみたいと思います。 ご投稿ありがとうございました。

Posted feedbacks - Python

とりあえず。
1
2
3
4
5
6
7
8
9
import sys
def bar():
  return foo()

def baz():
  return foo()

def foo():
  return sys._getframe(1).f_code.co_name

あまり自信なし。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import inspect

def foo():
    print inspect.stack()[1][3]

def bar():
    foo()

def baz():
    foo()

def main():
    bar()
    baz()

if __name__ == '__main__':
    main()

inspectはまだ使いこなせていませんが。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def caller():
    import inspect
    return inspect.getouterframes(inspect.currentframe())[1][3]

def foo():
    print caller()

def bar():
    print caller()

foo(), bar()
# foo
# bar

Index

Feed

Other

Link

Pathtraq

loading...