2

次のコードを使用して、呼び出されたメソッドで呼び出し元のメソッド名を取得します

import inspect

def B():
    outerframe = inspect.currentframe().f_back
    functionname = outerframe.f_code.co_name
    docstring = ??
    return "caller's name: {0}, docsting: {1}".format(functionname, docstring)

def A():
    """docstring for A"""
    return B()


print A()

しかし、呼び出されたメソッドの呼び出し元のメソッドからdocstringを取得したいとも思います。それ、どうやったら出来るの?

4

2 に答える 2

2

関数オブジェクトへの参照がないため、できません。属性を持つのは関数オブジェクトであり__doc__、関連付けられたコードオブジェクトではありません。

ファイル名と行番号の情報を使用して、docstringが何であるかについて知識に基づいた推測を行う必要がありますが、Pythonの動的な性質により、正確で最新であることが保証されません。

于 2013-03-11T14:44:31.767 に答える
0

必ずしもアドバイスする必要はありませんが、いつでもglobals()を使用して名前で関数を見つけることができます。それは次のようになります:

import inspect

def B():
    """test"""
    outerframe = inspect.currentframe().f_back
    functionname = outerframe.f_code.co_name
    docstring = globals()[ functionname ].__doc__
    return "caller's name: {0}, docsting: {1}".format(functionname, docstring)

def A():
    """docstring for A"""
    return B()

print A()
于 2013-03-11T14:44:16.720 に答える