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()

但我也想在被调用的方法中从调用者的方法中获取文档字符串。我怎么做?

4

2 回答 2

2

你不能,因为你没有对函数对象的引用。具有属性的是函数对象,__doc__而不是关联的代码对象。

您必须使用文件名和行号信息来尝试对文档字符串可能是什么做出有根据的猜测,但由于 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 回答